https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878
--- Comment #23 from Florian Weimer <fw at gcc dot gnu.org> --- Ahh, I think this bug here is specific to __uint128 (with the C front end at least) The C translation of the C++ reproducer from comment 20: struct a { long _Alignas(16) x; long y; }; _Bool cmpxchg (struct a *data, struct a expected, struct a newval) { return __atomic_compare_exchange_n (&data, &expected, &newval, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); } produces the atomic instruction.