diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2025-08-13 14:18:26 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2025-08-13 19:31:45 -0700 |
commit | 9d7f45e9806c50bf6d8f0f6f93fa657dc418401b (patch) | |
tree | 5f21cf86dd32b20adf28cb56739cbf915dd248d4 | |
parent | 6520bb9efb2dd6b1ecdb28ed698b4c5b320de7bb (diff) | |
download | gcc-9d7f45e9806c50bf6d8f0f6f93fa657dc418401b.zip gcc-9d7f45e9806c50bf6d8f0f6f93fa657dc418401b.tar.gz gcc-9d7f45e9806c50bf6d8f0f6f93fa657dc418401b.tar.bz2 |
x86: Disallow MMX and 80387 in no_caller_saved_registers function
commit 9804b23198b39f85a7258be556c5e8aed44b9efc
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sun Apr 13 11:38:24 2025 -0700
x86: Add preserve_none and update no_caller_saved_registers attributes
allowed MMX/80387 instructions in functions with no_caller_saved_registers
attribute by accident. Update ix86_set_current_function to properly
check if MMX and 80387 are enabled.
gcc/
PR target/121540
* config/i386/i386-options.cc (ix86_set_current_function):
Properly check if MMX and 80387 are enabled.
gcc/testsuite/
PR target/121540
* gcc.target/i386/no-callee-saved-19a.c (dg-options): Add
"-mno-avx -mno-mmx -mno-80387"
* gcc.target/i386/no-callee-saved-19b.c: Likewise.
* gcc.target/i386/no-callee-saved-19c.c: Likewise.
* gcc.target/i386/no-callee-saved-19d.c: Likewise.
* gcc.target/i386/no-callee-saved-19e.c: Likewise.
* gcc.target/i386/pr121208-1a.c: Likewise.
* gcc.target/i386/pr121208-1b.c: Likewise.
* gcc.target/i386/pr121540-1.c: New test.
* gcc.target/i386/pr121540-2.c: Likewise.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
-rw-r--r-- | gcc/config/i386/i386-options.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr121208-1a.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr121208-1b.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr121540-1.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr121540-2.c | 8 |
10 files changed, 27 insertions, 7 deletions
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 09a35ef..136c0f2 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -3556,6 +3556,10 @@ ix86_set_current_function (tree fndecl) isa = "AVX"; else if (cfun->machine->func_type != TYPE_NORMAL) isa = "SSE"; + else if (TARGET_MMX) + isa = "MMX/3Dnow"; + else if (TARGET_80387) + isa = "80387"; else isa = NULL; } diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c b/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c index 12f35cf..3ba578d 100644 --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19a.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { *-*-linux* && lp64 } } } */ -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c b/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c index c9343a6..dc38936 100644 --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19b.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */ -/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mno-apxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c b/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c index 05aca9f..e7f247b 100644 --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19c.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { *-*-linux* && ia32 } } } */ -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c b/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c index b3caa3d..4657e17 100644 --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19d.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { *-*-linux* && lp64 } } } */ -/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* { dg-options "-O2 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ diff --git a/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c b/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c index 3fcb41f..8e0bbe8 100644 --- a/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c +++ b/gcc/testsuite/gcc.target/i386/no-callee-saved-19e.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { *-*-linux* && maybe_x32 } } } */ -/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ +/* { dg-options "-O2 -mx32 -fno-pic -mtune=generic -msse2 -mno-avx -mno-mmx -mno-80387 -mapxf -mtune-ctrl=prologue_using_move,epilogue_using_move" } */ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ /* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.} } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr121208-1a.c b/gcc/testsuite/gcc.target/i386/pr121208-1a.c index cb8bd0b..f799bc8 100644 --- a/gcc/testsuite/gcc.target/i386/pr121208-1a.c +++ b/gcc/testsuite/gcc.target/i386/pr121208-1a.c @@ -1,5 +1,5 @@ /* { dg-do compile { target *-*-linux* } } */ -/* { dg-options "-O2 -fPIC -mno-80387 -mtls-dialect=gnu" } */ +/* { dg-options "-O2 -fPIC -mno-avx -mno-mmx -mno-80387 -mtls-dialect=gnu" } */ extern __thread int bar; extern void func (void); diff --git a/gcc/testsuite/gcc.target/i386/pr121208-1b.c b/gcc/testsuite/gcc.target/i386/pr121208-1b.c index 037e9a0..ba37abc 100644 --- a/gcc/testsuite/gcc.target/i386/pr121208-1b.c +++ b/gcc/testsuite/gcc.target/i386/pr121208-1b.c @@ -1,4 +1,4 @@ /* { dg-do compile { target *-*-linux* } } */ -/* { dg-options "-O2 -fPIC -mno-80387 -mtls-dialect=gnu2" } */ +/* { dg-options "-O2 -fPIC -mno-avx -mno-mmx -mno-80387 -mtls-dialect=gnu2" } */ #include "pr121208-1a.c" diff --git a/gcc/testsuite/gcc.target/i386/pr121540-1.c b/gcc/testsuite/gcc.target/i386/pr121540-1.c new file mode 100644 index 0000000..dee9c27 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121540-1.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=x86-64" } */ + +void + __attribute__ ((no_caller_saved_registers)) +fn (void) +{ /* { dg-message "sorry, unimplemented: MMX/3Dnow instructions aren't allowed" } */ +} diff --git a/gcc/testsuite/gcc.target/i386/pr121540-2.c b/gcc/testsuite/gcc.target/i386/pr121540-2.c new file mode 100644 index 0000000..15a3f40 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr121540-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=x86-64 -mno-mmx" } */ + +void + __attribute__ ((no_caller_saved_registers)) +fn (void) +{ /* { dg-message "sorry, unimplemented: 80387 instructions aren't allowed" } */ +} |