https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102393
--- Comment #3 from Gabriel Ravier <gabravier at gmail dot com> --- It seems odd that the equivalent 32-bit pattern, i.e. this: void HeaderWriteU32LE(int offset, uint32_t value, uint8_t *RomHeader) { RomHeader[offset] = value; RomHeader[offset + 1] = value >> 8; RomHeader[offset + 2] = value >> 16; RomHeader[offset + 3] = value >> 24; } is optimized to a single store, though, even though the 32-bit pattern for PR 102391 doesn't. It's why I made this a separate bug report, as I thought it indicated a likely difference in the cause of the bug.