Memory ordering on x86 is actually really strong compared to others. You've picked the one example of when x86 //is// allowed to reorder memory operations: StoreLoad. The rest of the cases {StoreStore, LoadLoad, LoadStore} are ordered.