https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116856
Robert Hölzl <robert.hoelzl at posteo dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |UNCONFIRMED Resolution|INVALID |--- --- Comment #2 from Robert Hölzl <robert.hoelzl at posteo dot de> --- Cortex-M generally allows unaligned access: https://developer.arm.com/documentation/ddi0406/c/Appendices/ARMv6-Differences/Application-level-memory-support/Alignment?lang=en Actually I tested already to create an unaligned type (although I'd expect that the compiler guesses that without a hint): uint8_t array[100]; uint32_t __attribute__ ((__aligned__(1))) * ptr = (uint32_t *) (array + 1); *ptr ^= *(ptr+1); But that still uses LDRD (although it should be clear to the compiler that this will not work out).