]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Define HAS_CPUID/HAS_I586/HAS_I686 from -march=
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 18 Aug 2015 14:59:49 +0000 (07:59 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 18 Aug 2015 15:00:00 +0000 (08:00 -0700)
cpuid, i586 and i686 instructions are available if the processor
specified by -march= supports them.  We can use this information
to determine whether those instructions can be used safely.

* sysdeps/x86/cpu-features.c (init_cpu_features): Check
whether cpuid is available only if HAS_CPUID is 0.
* sysdeps/x86/cpu-features.h (HAS_CPUID): New.
(HAS_I586): Likewise.
(HAS_I686): Likewise.

ChangeLog
sysdeps/x86/cpu-features.c
sysdeps/x86/cpu-features.h

index 298bd229418f9ae71fa856a79598569969359546..db5d4831807e6a741a443ee7f1893c5f34d9c697 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-08-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * sysdeps/x86/cpu-features.c (init_cpu_features): Check
+       whether cpuid is available only if HAS_CPUID is 0.
+       * sysdeps/x86/cpu-features.h (HAS_CPUID): New.
+       (HAS_I586): Likewise.
+       (HAS_I686): Likewise.
+
 2015-08-18  Marko Myllynen  <myllynen@redhat.com>
 
        [BZ #16973]
index 582a8f5f7980edbf9a31b0d04a6194e46e6b63af..40575de611ca251ea2ba70893bc5619f46d00ec8 100644 (file)
@@ -40,7 +40,7 @@ init_cpu_features (struct cpu_features *cpu_features)
   unsigned int model = 0;
   enum cpu_features_kind kind;
 
-#if !defined __i586__ && !defined __i686__ && !defined __x86_64__
+#if !HAS_CPUID
   if (__get_cpuid_max (0, 0) == 0)
     {
       kind = arch_kind_other;
@@ -204,7 +204,7 @@ init_cpu_features (struct cpu_features *cpu_features)
        }
     }
 
-#if !defined __i586__ && !defined __i686__ && !defined __x86_64__
+#if !HAS_CPUID
 no_cpuid:
 #endif
 
index 22e5abb919f641dbecaea418834f35213c0e322e..6b8299f12579948a99f0b1eff0563da57af1a937 100644 (file)
@@ -237,4 +237,31 @@ extern const struct cpu_features *__get_cpu_features (void)
 
 #endif /* !__ASSEMBLER__ */
 
+#ifdef __x86_64__
+# define HAS_CPUID 1
+#elif defined __pentium__
+# define HAS_CPUID 1
+# define HAS_I586 1
+# define HAS_I686 0
+#elif (defined __pentiumpro__ || defined __pentium4__          \
+       || defined __nocona__ || defined __atom__               \
+       || defined __core2__ || defined __corei7__              \
+       || defined __corei7_avx__ || defined __core_avx2__      \
+       || defined __nehalem__ || defined __sandybridge__       \
+       || defined __haswell__  || defined __knl__              \
+       || defined __bonnell__ || defined __silvermont__        \
+       || defined __k6__ || defined __k8__                     \
+       || defined __athlon__ || defined __amdfam10__           \
+       || defined __bdver1__ || defined __bdver2__             \
+       || defined __bdver3__ || defined __bdver4__             \
+       || defined __btver1__ || defined __btver2__)
+# define HAS_CPUID 1
+# define HAS_I586 1
+# define HAS_I686 1
+#else
+# define HAS_CPUID 0
+# define HAS_I586 0
+# define HAS_I686 0
+#endif
+
 #endif  /* cpu_features_h */