  We propose an axiomatic generic framework for modelling weak memory. We show
how to instantiate this framework for SC, TSO, C++ restricted to
release-acquire atomics, and Power. For Power, we compare our model to a
preceding operational model in which we found a flaw. To do so, we define an
operational model that we show equivalent to our axiomatic model.
  We also propose a model for ARM. Our testing on this architecture revealed a
behaviour later acknowledged as a bug by ARM, and more recently 33 additional
anomalies.
  We offer a new simulation tool, called herd, which allows the user to specify
the model of his choice in a concise way. Given a specification of a model, the
tool becomes a simulator for that model. The tool relies on an axiomatic
description; this choice allows us to outperform all previous simulation tools.
Additionally, we confirm that verification time is vastly improved, in the case
of bounded model-checking.
  Finally, we put our models in perspective, in the light of empirical data
obtained by analysing the C and C++ code of a Debian Linux distribution. We
present our new analysis tool, called mole, which explores a piece of code to
find the weak memory idioms that it uses.
