Message ID | 20201224234558.1952004-1-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | Remove _ISOMAC check from <cpu-features.h> | expand |
On Thu, Dec 24, 2020 at 3:46 PM H.J. Lu <hjl.tools@gmail.com> wrote: > > Remove _ISOMAC check from <cpu-features.h> since it isn't an installer > header file. > --- > sysdeps/x86/include/cpu-features.h | 156 ++++++++++++++--------------- > 1 file changed, 75 insertions(+), 81 deletions(-) > > diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h > index 0df57d9a17..a53194a6ca 100644 > --- a/sysdeps/x86/include/cpu-features.h > +++ b/sysdeps/x86/include/cpu-features.h > @@ -23,20 +23,16 @@ > # error this should be impossible > #endif > > -#ifndef _ISOMAC > /* Get most of the contents from the public header, but we define a > different `struct cpu_features' type for private use. */ > -# define cpu_features cpu_features_public > -# define __x86_get_cpu_features __x86_get_cpu_features_public > -#endif > +#define cpu_features cpu_features_public > +#define __x86_get_cpu_features __x86_get_cpu_features_public > > #include <sysdeps/x86/sys/platform/x86.h> > > -#ifndef _ISOMAC > - > -# undef cpu_features > -# undef __x86_get_cpu_features > -# define __get_cpu_features() __x86_get_cpu_features (0) > +#undef cpu_features > +#undef __x86_get_cpu_features > +#define __get_cpu_features() __x86_get_cpu_features (0) > > enum > { > @@ -48,79 +44,79 @@ enum > }; > > /* Only used directly in cpu-features.c. */ > -# define CPU_FEATURE_SET(ptr, name) \ > +#define CPU_FEATURE_SET(ptr, name) \ > ptr->features[index_cpu_##name].usable.reg_##name |= bit_cpu_##name; > -# define CPU_FEATURE_UNSET(ptr, name) \ > +#define CPU_FEATURE_UNSET(ptr, name) \ > ptr->features[index_cpu_##name].usable.reg_##name &= ~bit_cpu_##name; > -# define CPU_FEATURE_SET_USABLE(ptr, name) \ > +#define CPU_FEATURE_SET_USABLE(ptr, name) \ > ptr->features[index_cpu_##name].usable.reg_##name \ > |= ptr->features[index_cpu_##name].cpuid.reg_##name & bit_cpu_##name; > -# define CPU_FEATURE_PREFERRED_P(ptr, name) \ > +#define CPU_FEATURE_PREFERRED_P(ptr, name) \ > ((ptr->preferred[index_arch_##name] & bit_arch_##name) != 0) > > /* HAS_CPU_FEATURE evaluates to true if CPU supports the feature. */ > -# undef HAS_CPU_FEATURE > -# define HAS_CPU_FEATURE(name) \ > +#undef HAS_CPU_FEATURE > +#define HAS_CPU_FEATURE(name) \ > CPU_FEATURE_CPU_P (__x86_get_cpu_features (0), name) > /* CPU_FEATURE_USABLE evaluates to true if the feature is usable. */ > -# undef CPU_FEATURE_USABLE > -# define CPU_FEATURE_USABLE(name) \ > +#undef CPU_FEATURE_USABLE > +#define CPU_FEATURE_USABLE(name) \ > CPU_FEATURE_USABLE_P (__x86_get_cpu_features (0), name) > /* CPU_FEATURE_PREFER evaluates to true if we prefer the feature at > runtime. */ > -# define CPU_FEATURE_PREFERRED(name) \ > +#define CPU_FEATURE_PREFERRED(name) \ > CPU_FEATURE_PREFERRED_P(__get_cpu_features (), name) > > -# define CPU_FEATURES_CPU_P(ptr, name) \ > +#define CPU_FEATURES_CPU_P(ptr, name) \ > CPU_FEATURE_CPU_P (ptr, name) > -# define CPU_FEATURES_ARCH_P(ptr, name) \ > +#define CPU_FEATURES_ARCH_P(ptr, name) \ > CPU_FEATURE_PREFERRED_P (ptr, name) > -# define HAS_ARCH_FEATURE(name) \ > +#define HAS_ARCH_FEATURE(name) \ > CPU_FEATURE_PREFERRED (name) > > /* PREFERRED_FEATURE_INDEX_1. */ > -# define bit_arch_I586 (1u << 0) > -# define bit_arch_I686 (1u << 1) > -# define bit_arch_Fast_Rep_String (1u << 2) > -# define bit_arch_Fast_Copy_Backward (1u << 3) > -# define bit_arch_Fast_Unaligned_Load (1u << 4) > -# define bit_arch_Fast_Unaligned_Copy (1u << 5) > -# define bit_arch_Slow_BSF (1u << 6) > -# define bit_arch_Slow_SSE4_2 (1u << 7) > -# define bit_arch_AVX_Fast_Unaligned_Load (1u << 8) > -# define bit_arch_Prefer_MAP_32BIT_EXEC (1u << 9) > -# define bit_arch_Prefer_PMINUB_for_stringop (1u << 10) > -# define bit_arch_Prefer_No_VZEROUPPER (1u << 11) > -# define bit_arch_Prefer_ERMS (1u << 12) > -# define bit_arch_Prefer_FSRM (1u << 13) > -# define bit_arch_Prefer_No_AVX512 (1u << 14) > -# define bit_arch_MathVec_Prefer_No_AVX512 (1u << 15) > - > -# define index_arch_Fast_Rep_String PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Fast_Copy_Backward PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Slow_BSF PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_PMINUB_for_stringop PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Fast_Unaligned_Copy PREFERRED_FEATURE_INDEX_1 > -# define index_arch_I586 PREFERRED_FEATURE_INDEX_1 > -# define index_arch_I686 PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Slow_SSE4_2 PREFERRED_FEATURE_INDEX_1 > -# define index_arch_AVX_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_MAP_32BIT_EXEC PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_No_VZEROUPPER PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_ERMS PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 > -# define index_arch_MathVec_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 > -# define index_arch_Prefer_FSRM PREFERRED_FEATURE_INDEX_1 > +#define bit_arch_I586 (1u << 0) > +#define bit_arch_I686 (1u << 1) > +#define bit_arch_Fast_Rep_String (1u << 2) > +#define bit_arch_Fast_Copy_Backward (1u << 3) > +#define bit_arch_Fast_Unaligned_Load (1u << 4) > +#define bit_arch_Fast_Unaligned_Copy (1u << 5) > +#define bit_arch_Slow_BSF (1u << 6) > +#define bit_arch_Slow_SSE4_2 (1u << 7) > +#define bit_arch_AVX_Fast_Unaligned_Load (1u << 8) > +#define bit_arch_Prefer_MAP_32BIT_EXEC (1u << 9) > +#define bit_arch_Prefer_PMINUB_for_stringop (1u << 10) > +#define bit_arch_Prefer_No_VZEROUPPER (1u << 11) > +#define bit_arch_Prefer_ERMS (1u << 12) > +#define bit_arch_Prefer_FSRM (1u << 13) > +#define bit_arch_Prefer_No_AVX512 (1u << 14) > +#define bit_arch_MathVec_Prefer_No_AVX512 (1u << 15) > + > +#define index_arch_Fast_Rep_String PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Fast_Copy_Backward PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Slow_BSF PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_PMINUB_for_stringop PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Fast_Unaligned_Copy PREFERRED_FEATURE_INDEX_1 > +#define index_arch_I586 PREFERRED_FEATURE_INDEX_1 > +#define index_arch_I686 PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Slow_SSE4_2 PREFERRED_FEATURE_INDEX_1 > +#define index_arch_AVX_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_MAP_32BIT_EXEC PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_No_VZEROUPPER PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_ERMS PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 > +#define index_arch_MathVec_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 > +#define index_arch_Prefer_FSRM PREFERRED_FEATURE_INDEX_1 > > /* XCR0 Feature flags. */ > -# define bit_XMM_state (1u << 1) > -# define bit_YMM_state (1u << 2) > -# define bit_Opmask_state (1u << 5) > -# define bit_ZMM0_15_state (1u << 6) > -# define bit_ZMM16_31_state (1u << 7) > -# define bit_XTILECFG_state (1u << 17) > -# define bit_XTILEDATA_state (1u << 18) > +#define bit_XMM_state (1u << 1) > +#define bit_YMM_state (1u << 2) > +#define bit_Opmask_state (1u << 5) > +#define bit_ZMM0_15_state (1u << 6) > +#define bit_ZMM16_31_state (1u << 7) > +#define bit_XTILECFG_state (1u << 17) > +#define bit_XTILEDATA_state (1u << 18) > > struct cpu_features > { > @@ -153,30 +149,28 @@ struct cpu_features > unsigned long int rep_stosb_threshold; > }; > > -# if defined (_LIBC) && !IS_IN (nonlib) > +#if defined (_LIBC) && !IS_IN (nonlib) > /* Unused for x86. */ > -# define INIT_ARCH() > -# define __x86_get_cpu_features(max) (&GLRO(dl_x86_cpu_features)) > +# define INIT_ARCH() > +# define __x86_get_cpu_features(max) (&GLRO(dl_x86_cpu_features)) > extern void _dl_x86_init_cpu_features (void) attribute_hidden; > -# endif > +#endif > > -# ifdef __x86_64__ > -# define HAS_CPUID 1 > -# elif (defined __i586__ || defined __pentium__ \ > +#ifdef __x86_64__ > +# define HAS_CPUID 1 > +#elif (defined __i586__ || defined __pentium__ \ > || defined __geode__ || defined __k6__) > -# define HAS_CPUID 1 > -# define HAS_I586 1 > -# define HAS_I686 HAS_ARCH_FEATURE (I686) > -# elif defined __i486__ > -# define HAS_CPUID 0 > -# define HAS_I586 HAS_ARCH_FEATURE (I586) > -# define HAS_I686 HAS_ARCH_FEATURE (I686) > -# else > -# define HAS_CPUID 1 > -# define HAS_I586 1 > -# define HAS_I686 1 > +# define HAS_CPUID 1 > +# define HAS_I586 1 > +# define HAS_I686 HAS_ARCH_FEATURE (I686) > +#elif defined __i486__ > +# define HAS_CPUID 0 > +# define HAS_I586 HAS_ARCH_FEATURE (I586) > +# define HAS_I686 HAS_ARCH_FEATURE (I686) > +#else > +# define HAS_CPUID 1 > +# define HAS_I586 1 > +# define HAS_I686 1 > # endif > > -#endif /* !_ISOMAC */ > - > #endif /* include/cpu-features.h */ > -- > 2.29.2 > Tested on i686, x32 and x86-64. I am checking it in.
diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h index 0df57d9a17..a53194a6ca 100644 --- a/sysdeps/x86/include/cpu-features.h +++ b/sysdeps/x86/include/cpu-features.h @@ -23,20 +23,16 @@ # error this should be impossible #endif -#ifndef _ISOMAC /* Get most of the contents from the public header, but we define a different `struct cpu_features' type for private use. */ -# define cpu_features cpu_features_public -# define __x86_get_cpu_features __x86_get_cpu_features_public -#endif +#define cpu_features cpu_features_public +#define __x86_get_cpu_features __x86_get_cpu_features_public #include <sysdeps/x86/sys/platform/x86.h> -#ifndef _ISOMAC - -# undef cpu_features -# undef __x86_get_cpu_features -# define __get_cpu_features() __x86_get_cpu_features (0) +#undef cpu_features +#undef __x86_get_cpu_features +#define __get_cpu_features() __x86_get_cpu_features (0) enum { @@ -48,79 +44,79 @@ enum }; /* Only used directly in cpu-features.c. */ -# define CPU_FEATURE_SET(ptr, name) \ +#define CPU_FEATURE_SET(ptr, name) \ ptr->features[index_cpu_##name].usable.reg_##name |= bit_cpu_##name; -# define CPU_FEATURE_UNSET(ptr, name) \ +#define CPU_FEATURE_UNSET(ptr, name) \ ptr->features[index_cpu_##name].usable.reg_##name &= ~bit_cpu_##name; -# define CPU_FEATURE_SET_USABLE(ptr, name) \ +#define CPU_FEATURE_SET_USABLE(ptr, name) \ ptr->features[index_cpu_##name].usable.reg_##name \ |= ptr->features[index_cpu_##name].cpuid.reg_##name & bit_cpu_##name; -# define CPU_FEATURE_PREFERRED_P(ptr, name) \ +#define CPU_FEATURE_PREFERRED_P(ptr, name) \ ((ptr->preferred[index_arch_##name] & bit_arch_##name) != 0) /* HAS_CPU_FEATURE evaluates to true if CPU supports the feature. */ -# undef HAS_CPU_FEATURE -# define HAS_CPU_FEATURE(name) \ +#undef HAS_CPU_FEATURE +#define HAS_CPU_FEATURE(name) \ CPU_FEATURE_CPU_P (__x86_get_cpu_features (0), name) /* CPU_FEATURE_USABLE evaluates to true if the feature is usable. */ -# undef CPU_FEATURE_USABLE -# define CPU_FEATURE_USABLE(name) \ +#undef CPU_FEATURE_USABLE +#define CPU_FEATURE_USABLE(name) \ CPU_FEATURE_USABLE_P (__x86_get_cpu_features (0), name) /* CPU_FEATURE_PREFER evaluates to true if we prefer the feature at runtime. */ -# define CPU_FEATURE_PREFERRED(name) \ +#define CPU_FEATURE_PREFERRED(name) \ CPU_FEATURE_PREFERRED_P(__get_cpu_features (), name) -# define CPU_FEATURES_CPU_P(ptr, name) \ +#define CPU_FEATURES_CPU_P(ptr, name) \ CPU_FEATURE_CPU_P (ptr, name) -# define CPU_FEATURES_ARCH_P(ptr, name) \ +#define CPU_FEATURES_ARCH_P(ptr, name) \ CPU_FEATURE_PREFERRED_P (ptr, name) -# define HAS_ARCH_FEATURE(name) \ +#define HAS_ARCH_FEATURE(name) \ CPU_FEATURE_PREFERRED (name) /* PREFERRED_FEATURE_INDEX_1. */ -# define bit_arch_I586 (1u << 0) -# define bit_arch_I686 (1u << 1) -# define bit_arch_Fast_Rep_String (1u << 2) -# define bit_arch_Fast_Copy_Backward (1u << 3) -# define bit_arch_Fast_Unaligned_Load (1u << 4) -# define bit_arch_Fast_Unaligned_Copy (1u << 5) -# define bit_arch_Slow_BSF (1u << 6) -# define bit_arch_Slow_SSE4_2 (1u << 7) -# define bit_arch_AVX_Fast_Unaligned_Load (1u << 8) -# define bit_arch_Prefer_MAP_32BIT_EXEC (1u << 9) -# define bit_arch_Prefer_PMINUB_for_stringop (1u << 10) -# define bit_arch_Prefer_No_VZEROUPPER (1u << 11) -# define bit_arch_Prefer_ERMS (1u << 12) -# define bit_arch_Prefer_FSRM (1u << 13) -# define bit_arch_Prefer_No_AVX512 (1u << 14) -# define bit_arch_MathVec_Prefer_No_AVX512 (1u << 15) - -# define index_arch_Fast_Rep_String PREFERRED_FEATURE_INDEX_1 -# define index_arch_Fast_Copy_Backward PREFERRED_FEATURE_INDEX_1 -# define index_arch_Slow_BSF PREFERRED_FEATURE_INDEX_1 -# define index_arch_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_PMINUB_for_stringop PREFERRED_FEATURE_INDEX_1 -# define index_arch_Fast_Unaligned_Copy PREFERRED_FEATURE_INDEX_1 -# define index_arch_I586 PREFERRED_FEATURE_INDEX_1 -# define index_arch_I686 PREFERRED_FEATURE_INDEX_1 -# define index_arch_Slow_SSE4_2 PREFERRED_FEATURE_INDEX_1 -# define index_arch_AVX_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_MAP_32BIT_EXEC PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_No_VZEROUPPER PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_ERMS PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 -# define index_arch_MathVec_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 -# define index_arch_Prefer_FSRM PREFERRED_FEATURE_INDEX_1 +#define bit_arch_I586 (1u << 0) +#define bit_arch_I686 (1u << 1) +#define bit_arch_Fast_Rep_String (1u << 2) +#define bit_arch_Fast_Copy_Backward (1u << 3) +#define bit_arch_Fast_Unaligned_Load (1u << 4) +#define bit_arch_Fast_Unaligned_Copy (1u << 5) +#define bit_arch_Slow_BSF (1u << 6) +#define bit_arch_Slow_SSE4_2 (1u << 7) +#define bit_arch_AVX_Fast_Unaligned_Load (1u << 8) +#define bit_arch_Prefer_MAP_32BIT_EXEC (1u << 9) +#define bit_arch_Prefer_PMINUB_for_stringop (1u << 10) +#define bit_arch_Prefer_No_VZEROUPPER (1u << 11) +#define bit_arch_Prefer_ERMS (1u << 12) +#define bit_arch_Prefer_FSRM (1u << 13) +#define bit_arch_Prefer_No_AVX512 (1u << 14) +#define bit_arch_MathVec_Prefer_No_AVX512 (1u << 15) + +#define index_arch_Fast_Rep_String PREFERRED_FEATURE_INDEX_1 +#define index_arch_Fast_Copy_Backward PREFERRED_FEATURE_INDEX_1 +#define index_arch_Slow_BSF PREFERRED_FEATURE_INDEX_1 +#define index_arch_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_PMINUB_for_stringop PREFERRED_FEATURE_INDEX_1 +#define index_arch_Fast_Unaligned_Copy PREFERRED_FEATURE_INDEX_1 +#define index_arch_I586 PREFERRED_FEATURE_INDEX_1 +#define index_arch_I686 PREFERRED_FEATURE_INDEX_1 +#define index_arch_Slow_SSE4_2 PREFERRED_FEATURE_INDEX_1 +#define index_arch_AVX_Fast_Unaligned_Load PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_MAP_32BIT_EXEC PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_No_VZEROUPPER PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_ERMS PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 +#define index_arch_MathVec_Prefer_No_AVX512 PREFERRED_FEATURE_INDEX_1 +#define index_arch_Prefer_FSRM PREFERRED_FEATURE_INDEX_1 /* XCR0 Feature flags. */ -# define bit_XMM_state (1u << 1) -# define bit_YMM_state (1u << 2) -# define bit_Opmask_state (1u << 5) -# define bit_ZMM0_15_state (1u << 6) -# define bit_ZMM16_31_state (1u << 7) -# define bit_XTILECFG_state (1u << 17) -# define bit_XTILEDATA_state (1u << 18) +#define bit_XMM_state (1u << 1) +#define bit_YMM_state (1u << 2) +#define bit_Opmask_state (1u << 5) +#define bit_ZMM0_15_state (1u << 6) +#define bit_ZMM16_31_state (1u << 7) +#define bit_XTILECFG_state (1u << 17) +#define bit_XTILEDATA_state (1u << 18) struct cpu_features { @@ -153,30 +149,28 @@ struct cpu_features unsigned long int rep_stosb_threshold; }; -# if defined (_LIBC) && !IS_IN (nonlib) +#if defined (_LIBC) && !IS_IN (nonlib) /* Unused for x86. */ -# define INIT_ARCH() -# define __x86_get_cpu_features(max) (&GLRO(dl_x86_cpu_features)) +# define INIT_ARCH() +# define __x86_get_cpu_features(max) (&GLRO(dl_x86_cpu_features)) extern void _dl_x86_init_cpu_features (void) attribute_hidden; -# endif +#endif -# ifdef __x86_64__ -# define HAS_CPUID 1 -# elif (defined __i586__ || defined __pentium__ \ +#ifdef __x86_64__ +# define HAS_CPUID 1 +#elif (defined __i586__ || defined __pentium__ \ || defined __geode__ || defined __k6__) -# define HAS_CPUID 1 -# define HAS_I586 1 -# define HAS_I686 HAS_ARCH_FEATURE (I686) -# elif defined __i486__ -# define HAS_CPUID 0 -# define HAS_I586 HAS_ARCH_FEATURE (I586) -# define HAS_I686 HAS_ARCH_FEATURE (I686) -# else -# define HAS_CPUID 1 -# define HAS_I586 1 -# define HAS_I686 1 +# define HAS_CPUID 1 +# define HAS_I586 1 +# define HAS_I686 HAS_ARCH_FEATURE (I686) +#elif defined __i486__ +# define HAS_CPUID 0 +# define HAS_I586 HAS_ARCH_FEATURE (I586) +# define HAS_I686 HAS_ARCH_FEATURE (I686) +#else +# define HAS_CPUID 1 +# define HAS_I586 1 +# define HAS_I686 1 # endif -#endif /* !_ISOMAC */ - #endif /* include/cpu-features.h */