// memory fence operations
//
// notes:
// - fences constrain reordering and participate in happens-before rules
// - on x86/x86_64, acquire/release/acqrel fences compile to no cpu barrier (but still compiler fence)
// - fence synchronization: release fence A syncs with acquire fence B if atomic ops X and Y exist
// on same object where A is sequenced-before X, Y is sequenced-before B, and Y observes X
use ;
// acquire fence - prevents subsequent ops from reordering before fence
// release fence - prevents prior ops from reordering after fence
// acquire-release fence - prevents reordering in both directions
// cpu spin-loop hint - use inside tight spin-wait loops
// not a memory fence, reduces power and improves smt/ht friendliness
// maps to PAUSE on x86/x86_64