[Bug target/126293] Add x86-64 option to turn on 128-bit inline atomic loads/stores

"cvs-commit at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126293

--- Comment #16 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by H.J. Lu <[email protected]>:

https://gcc.gnu.org/g:d9e21f7c4d1666baec96398f07ac500d1c912a12

commit r17-3230-gd9e21f7c4d1666baec96398f07ac500d1c912a12
Author: H.J. Lu <[email protected]>
Date:   Fri Jul 17 08:35:34 2026 +0800

    x86-64: Add -m128bit-atomic

    With the silicon vendor guarantees from Intel, AMD, Hygon and Zhaoxin in:

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104688

    many software developers would happily use inline 128-bit atomic loads
    and stores in their programs because they only target compatible CPUs.
    Add -m128bit-atomic to generate 128-bit atomic loads and stores to avoid
    the overhead of calling into libatomic.  Enable -m128bit-atomic in 64-bit
    mode by default if supported by the targeting processor, which is one of
    x86-64-v3 capable processors as well as AVX capable processors from Intel,
    AMD, Hygon and Zhaoxin.

    gcc/

            PR target/94649
            PR target/126293
            * common/config/i386/i386-cpuinfo.h (ix86_decode_cpu_info): New
            function.
            * config/i386/i386-options.cc
            (ix86_option_override_internal): Issue an error for -m128bit-atomic
            in 32-bit mode.  Turn on -mcx16 if -m128bit-atomic is enabled.
            Enable -m128bit-atomic in 64-bit mode by default if supported by
            the targeting processor.
            * config/i386/i386.h (TARGET_128BIT_ATOMIC_ENABLED): New.
            * config/i386/i386.opt (m128bit-atomic): New option.
            * config/i386/i386.opt.urls: Regenerated.
            * config/i386/sync.md: Update comments for 128-bit aligned vector
            loads and stores.
            (atomic_loadti): New pattern.
            (atomic_loadti_sse): Likewise.
            (atomic_storeti): Likewise.
            (atomic_storeti_sse): Likewise.
            * doc/invoke.texi: Remove __atomic Builtins reference from -mcx16.
            Document -m128bit-atomic.

    gcc/testsuite/

            PR target/94649
            PR target/126293
            * g++.target/i386/pr94649-1.C: New test.
            * gcc.target/i386/pr126293-1a.c: Likewise.
            * gcc.target/i386/pr126293-1b.c: Likewise.
            * gcc.target/i386/pr126293-1c.c: Likewise.
            * gcc.target/i386/pr126293-1d.c: Likewise.
            * gcc.target/i386/pr126293-2a.c: Likewise.
            * gcc.target/i386/pr126293-2b.c: Likewise.
            * gcc.target/i386/pr126293-3a.c: Likewise.
            * gcc.target/i386/pr126293-3b.c: Likewise.
            * gcc.target/i386/pr126293-4a.c: Likewise.
            * gcc.target/i386/pr126293-4b.c: Likewise.
            * gcc.target/i386/pr126293-4c.c: Likewise.
            * gcc.target/i386/pr126293-4d.c: Likewise.
            * gcc.target/i386/pr126293-4e.c: Likewise.
            * gcc.target/i386/pr126293-4f.c: Likewise.
            * gcc.target/i386/pr126293-4g.c: Likewise.
            * gcc.target/i386/pr126293-4h.c: Likewise.
            * gcc.target/i386/pr126293-4i.c: Likewise.
            * gcc.target/i386/pr126293-4j.c: Likewise.
            * gcc.target/i386/pr126293-4k.c: Likewise.
            * gcc.target/i386/pr126293-4l.c: Likewise.
            * gcc.target/i386/pr126293-4m.c: Likewise.
            * gcc.target/i386/pr126293-4n.c: Likewise.
            * gcc.target/i386/pr126293-4o.c: Likewise.
            * gcc.target/i386/pr126293-4p.c: Likewise.
            * gcc.target/i386/pr126293-4q.c: Likewise.
            * gcc.target/i386/pr126293-4r.c: Likewise.
            * gcc.target/i386/pr126293-4s.c: Likewise.
            * gcc.target/i386/pr126293-5.c: Likewise.
            * gcc.target/i386/pr126293-6.c: Likewise.
            * gcc.target/i386/pr126293-7.c: Likewise.
            * gcc.target/i386/pr126293-8.c: Likewise.
            * gcc.target/i386/pr126293-9.c: Likewise.
            * gcc.target/i386/pr126293-10.c: Likewise.
            * gcc.target/i386/pr126293-11.c: Likewise.
            * gcc.target/i386/pr126293-12.c: Likewise.
            * gcc.target/i386/pr126293-13.c: Likewise.
            * gcc.target/i386/pr126293-14.c: Likewise.
            * gcc.target/i386/pr126293-15.c: Likewise.
            * gcc.target/i386/pr126293-16.c: Likewise.
            * gcc.target/i386/pr126293-17.c: Likewise.

    Signed-off-by: H.J. Lu <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.