From 1814df5b02b9c359052c2048a1d2d617b406a17a Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 18 Aug 2015 07:59:49 -0700 Subject: Define HAS_CPUID/HAS_I586/HAS_I686 from -march= 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. --- sysdeps/x86/cpu-features.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'sysdeps/x86/cpu-features.h') diff --git a/sysdeps/x86/cpu-features.h b/sysdeps/x86/cpu-features.h index 22e5abb..6b8299f 100644 --- a/sysdeps/x86/cpu-features.h +++ b/sysdeps/x86/cpu-features.h @@ -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 */ -- cgit v1.1