https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878
Florian Weimer <fw at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |NEW
Last reconfirmed| |2018-03-29
Resolution|INVALID |---
Ever confirmed|0 |1
--- Comment #11 from Florian Weimer <fw at gcc dot gnu.org> ---
We do have a bug here: libatomic selects CMPXCHG16B based on CPUID support. If
we want to support loads from read-only mappings, we cannot do that, and have
to use locks unconditionally (for all 128-bit atomics, to achieve
synchronization).
So we either need to fix libatomic to use locks consistently, or -mcx16 should
enable the 128 bit CAS instruction (for loads/stores/CAS).
I believe most users who use the 128-bit atomics on x86-64 will want the
lock-free instructions, and not the support for read-only mappings.
Furthermore, the read-only mapping case is most relevant to cross-process
synchronization, and a process-local lock will not achieve synchronization
there.