http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56028
--- Comment #3 from Evgeniy Stepanov <eugeni.stepanov at gmail dot com> 2013-01-18 11:57:07 UTC --- (In reply to comment #2) > See 1.9p8 of the C++11 standard, first bullet: > > "Access to volatile objects are evaluated strictly according to the rules of > the abstract machine." > > From what I can see, implementing a store to a volatile DImode location as two > consecutive SImode stores to adjacent locations violates this aspect of the > standard. Furthermore, to expand on your parenthesized statement above, gcc > might not operate reliably if the device drivers in the kernel it is running > on > have their 64-bit immediate stores broken into pairs of 32-bit immediate > stores. ;-) So, what are these "rules of the abstract machine", and why do they allow non-atomic store of a large volatile aggregate (it is definitely not atomic, right?), and require atomicity for volatile long?