Suppose you have a pointer to a larger-than-native-type integer, what do recent C specs say regarding the store ordering? E.g.:
volatile uint64_t *test = (volatile uint64_t *)(addr);
*test = 0;
On a 32-bit architecture this will compile to two stores, does the C spec say anything about which store will be first (addr or addr+4)? Or is it implementation defined?
The endian is implementation defined.
It is implementation defined. It may be simultaneous. It does not even need to be consistent.