https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114923
--- Comment #9 from nfxjfg at googlemail dot com --- Oh, I completely missed that your statement was restricted to "in HW". Normally there are mechanisms in place that make all CPU-level memory accesses to registers strictly ordered. (In our hardware that is also the case.) I panicked because you seemed to imply that even the compiler can reorder accesses to reg1 and reg2, but this isn't the case according to you, the gcc docs, and maybe the standard. Sorry about that. I suppose it's regrettable that C and gcc do not consider the possibility that passing an address to a register (which volatile is pretty much the only useful thing for) does not imply that the memory at that address may change. But that seems to be the conclusion here.