]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86: Properly set x86 minimum ISA level [BZ #31883]
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 12 Jun 2024 03:14:56 +0000 (20:14 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 12 Jun 2024 21:27:54 +0000 (14:27 -0700)
Properly set libc_cv_have_x86_isa_level in shell for MINIMUM_X86_ISA_LEVEL
defined as

(__X86_ISA_V1 + __X86_ISA_V2 + __X86_ISA_V3 + __X86_ISA_V4)

Also set __X86_ISA_V2 to 1 for i386 if __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
is defined.  There are no changes in config.h nor in config.make on x86-64.
On i386, -march=x86-64-v2 with GCC generates

 #define MINIMUM_X86_ISA_LEVEL 2

in config.h and

have-x86-isa-level = 2

in config.make.  This fixes BZ #31883.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
sysdeps/x86/configure
sysdeps/x86/configure.ac
sysdeps/x86/isa-level.h

index 1e2325d0d7212d679a9352ebea7f75de0ae3b884..04c6ba3e6ca53fb6ee021df0aeccf278559f3a40 100644 (file)
@@ -141,8 +141,10 @@ libc_cv_have_x86_isa_level=3
 libc_cv_have_x86_isa_level=2
 #elif defined __x86_64__
 libc_cv_have_x86_isa_level=baseline
+#elif MINIMUM_X86_ISA_LEVEL == 1
+libc_cv_have_x86_isa_level=1
 #else
-libc_cv_have_x86_isa_level=MINIMUM_X86_ISA_LEVEL
+libc_cv_have_x86_isa_level=0
 #endif
 EOF
                 eval `${CC-cc} $CFLAGS $CPPFLAGS $ISAFLAG -I$srcdir -E conftest.c | grep libc_cv_have_x86_isa_level`
index 0b32fdfd4f1bb115303a0ca71256215a06a7f384..8a259d3971488e4b86a00017a8ccde49596f81c9 100644 (file)
@@ -98,8 +98,10 @@ libc_cv_have_x86_isa_level=3
 libc_cv_have_x86_isa_level=2
 #elif defined __x86_64__
 libc_cv_have_x86_isa_level=baseline
+#elif MINIMUM_X86_ISA_LEVEL == 1
+libc_cv_have_x86_isa_level=1
 #else
-libc_cv_have_x86_isa_level=MINIMUM_X86_ISA_LEVEL
+libc_cv_have_x86_isa_level=0
 #endif
 EOF
                 eval `${CC-cc} $CFLAGS $CPPFLAGS $ISAFLAG -I$srcdir -E conftest.c | grep libc_cv_have_x86_isa_level`
index 2c7f74212b9a27e540c3becdaba3d8153ae6e5d3..03c1fe2bf54e0673af4356ded8575fdab6cffa72 100644 (file)
 # define __X86_ISA_V1 0
 #endif
 
-#if __X86_ISA_V1 && defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16               \
+#ifdef __x86_64__
+# ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
+#  define __GCC_HAVE_SYNC_COMPARE_AND_SWAP
+# endif
+#else
+# ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8
+#  define __GCC_HAVE_SYNC_COMPARE_AND_SWAP
+# endif
+#endif
+
+#if __X86_ISA_V1 && defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP                 \
     && defined HAVE_X86_LAHF_SAHF && defined __POPCNT__ && defined __SSE3__   \
     && defined __SSSE3__ && defined __SSE4_1__ && defined __SSE4_2__
 /* NB: ISAs in x86-64 ISA level v2 are used.  */