]> git.ipfire.org Git - thirdparty/gcc.git/commit
x86: Disallow -mtls-dialect=gnu with no_caller_saved_registers
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 24 Jul 2025 14:38:13 +0000 (07:38 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 28 Jul 2025 15:05:58 +0000 (08:05 -0700)
commit5760ddbce26ff9c5c8851b6b2089ad65981d5078
treeaf2c2f79acb8e032e2f0282b1f66d7a835398371
parent86dc3b61c37946f1467466303ed29a143a952f35
x86: Disallow -mtls-dialect=gnu with no_caller_saved_registers

__tls_get_addr doesn't preserve vector registers.  When a function
with no_caller_saved_registers attribute calls __tls_get_addr, YMM
and ZMM registers will be clobbered.  Issue an error and suggest
-mtls-dialect=gnu2 in this case.

gcc/

PR target/121208
* config/i386/i386.cc (ix86_tls_get_addr): Issue an error for
-mtls-dialect=gnu with no_caller_saved_registers attribute and
suggest -mtls-dialect=gnu2.

gcc/testsuite/

PR target/121208
* gcc.target/i386/pr121208-1a.c: New test.
* gcc.target/i386/pr121208-1b.c: Likewise.
* gcc.target/i386/pr121208-2a.c: Likewise.
* gcc.target/i386/pr121208-2b.c: Likewise.
* gcc.target/i386/pr121208-3a.c: Likewise.
* gcc.target/i386/pr121208-3b.c: Likewise.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
gcc/config/i386/i386.cc
gcc/testsuite/gcc.target/i386/pr121208-1a.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr121208-1b.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr121208-2a.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr121208-2b.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr121208-3a.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr121208-3b.c [new file with mode: 0644]