
Roland Schwarz wrote:
Peter Dimov wrote:
Roland Schwarz wrote:
There are fifteen, in principle. The basic bidirectional ordering constraints are #LoadLoad, #LoadStore, #StoreLoad and #StoreStore, and a barrier can include any subset of them. In practice #StoreLoad usually implies a full barrier.
Hmm, these names are from the sparc architecture, correct? I don't know enough about this, so I would be glad if you could tell me more. I was speaking (altough didn't make it explicit) about the three barriers used in the linux kernel.
What is the semantics of e.g. #LoadLoad?
You are right, this is Sun SPARC terminology. #LoadLoad means that loads that precede the barrier cannot be reordered with loads that follow the barrier. The four basic primitives can be combined freely, so for example #LoadLoad | #LoadStore means that preceding loads cannot be reordered with subsequent loads or stores.