From ee6c5afec36aee14d2244a37a833ef7c2d16ab88 Mon Sep 17 00:00:00 2001 From: Lingling Kong Date: Wed, 24 Jul 2024 14:52:47 +0800 Subject: [PATCH] x86: Don't enable APX_F in 32-bit mode gcc/ChangeLog: PR target/115978 * config/i386/driver-i386.cc (host_detect_local_cpu): Enable APX_F only for 64-bit codegen. * config/i386/i386-options.cc (DEF_PTA): Skip PTA_APX_F if not in 64-bit mode. gcc/testsuite/ChangeLog: PR target/115978 * gcc.target/i386/pr115978-1.c: New test. * gcc.target/i386/pr115978-2.c: Ditto. --- gcc/config/i386/driver-i386.cc | 3 ++- gcc/config/i386/i386-options.cc | 3 ++- gcc/testsuite/gcc.target/i386/pr115978-1.c | 22 ++++++++++++++++++++++ gcc/testsuite/gcc.target/i386/pr115978-2.c | 6 ++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr115978-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr115978-2.c diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc index bb53af4b2039..695d8e6cdf14 100644 --- a/gcc/config/i386/driver-i386.cc +++ b/gcc/config/i386/driver-i386.cc @@ -893,7 +893,8 @@ const char *host_detect_local_cpu (int argc, const char **argv) if (has_feature (isa_names_table[i].feature)) { if (codegen_x86_64 - || isa_names_table[i].feature != FEATURE_UINTR) + || (isa_names_table[i].feature != FEATURE_UINTR + && isa_names_table[i].feature != FEATURE_APX_F)) options = concat (options, " ", isa_names_table[i].option, NULL); } diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index af450dba73dd..6c212a8edeb9 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -2385,7 +2385,8 @@ ix86_option_override_internal (bool main_args_p, #define DEF_PTA(NAME) \ if (((processor_alias_table[i].flags & PTA_ ## NAME) != 0) \ && PTA_ ## NAME != PTA_64BIT \ - && (TARGET_64BIT || PTA_ ## NAME != PTA_UINTR) \ + && (TARGET_64BIT || (PTA_ ## NAME != PTA_UINTR \ + && PTA_ ## NAME != PTA_APX_F))\ && !TARGET_EXPLICIT_ ## NAME ## _P (opts)) \ SET_TARGET_ ## NAME (opts); #include "i386-isa.def" diff --git a/gcc/testsuite/gcc.target/i386/pr115978-1.c b/gcc/testsuite/gcc.target/i386/pr115978-1.c new file mode 100644 index 000000000000..18a1c5f153a3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr115978-1.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -march=native" } */ + +int +main () +{ + if (__builtin_cpu_supports ("apxf")) + { +#ifdef __x86_64__ +# ifndef __APX_F__ + __builtin_abort (); +# endif +#else +# ifdef __APX_F__ + __builtin_abort (); +# endif +#endif + return 0; + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/i386/pr115978-2.c b/gcc/testsuite/gcc.target/i386/pr115978-2.c new file mode 100644 index 000000000000..900d6eb096ad --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr115978-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=native -mno-apxf" } */ + +#ifdef __APX_F__ +# error APX_F should be disabled +#endif