| commit 27f8864bd41f0f1b61e8e947d9a030b1a0d23df9 |
| Author: H.J. Lu <hjl.tools@gmail.com> |
| Date: Thu Jun 18 05:34:15 2020 -0700 |
| |
| x86: Update F16C detection [BZ #26133] |
| |
| Since F16C requires AVX, set F16C usable only when AVX is usable. |
| |
| diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c |
| index 2a801e1856cfe1b3..37619c93f8dbcc5d 100644 |
| |
| |
| @@ -146,6 +146,10 @@ get_common_indices (struct cpu_features *cpu_features, |
| if (CPU_FEATURES_CPU_P (cpu_features, XOP)) |
| cpu_features->feature[index_arch_XOP_Usable] |
| |= bit_arch_XOP_Usable; |
| + /* Determine if F16C is usable. */ |
| + if (CPU_FEATURES_CPU_P (cpu_features, F16C)) |
| + cpu_features->feature[index_arch_F16C_Usable] |
| + |= bit_arch_F16C_Usable; |
| } |
| |
| /* Check if OPMASK state, upper 256-bit of ZMM0-ZMM15 and |
| diff --git a/sysdeps/x86/cpu-features.h b/sysdeps/x86/cpu-features.h |
| index 7abfa046c4b8f6ac..f18f7520fcb7714a 100644 |
| |
| |
| @@ -142,6 +142,7 @@ extern const struct cpu_features *__get_cpu_features (void) |
| #define bit_arch_VPCLMULQDQ_Usable (1u << 20) |
| #define bit_arch_XOP_Usable (1u << 21) |
| #define bit_arch_XSAVEC_Usable (1u << 22) |
| +#define bit_arch_F16C_Usable (1u << 23) |
| |
| #define index_arch_AVX_Usable FEATURE_INDEX_1 |
| #define index_arch_AVX2_Usable FEATURE_INDEX_1 |
| @@ -166,6 +167,7 @@ extern const struct cpu_features *__get_cpu_features (void) |
| #define index_arch_VPCLMULQDQ_Usable FEATURE_INDEX_1 |
| #define index_arch_XOP_Usable FEATURE_INDEX_1 |
| #define index_arch_XSAVEC_Usable FEATURE_INDEX_1 |
| +#define index_arch_F16C_Usable FEATURE_INDEX_1 |
| |
| /* Unused. Compiler will optimize them out. */ |
| #define bit_arch_SSE3_Usable (1u << 0) |
| @@ -179,7 +181,6 @@ extern const struct cpu_features *__get_cpu_features (void) |
| #define bit_arch_AES_Usable (1u << 0) |
| #define bit_arch_XSAVE_Usable (1u << 0) |
| #define bit_arch_OSXSAVE_Usable (1u << 0) |
| -#define bit_arch_F16C_Usable (1u << 0) |
| #define bit_arch_RDRAND_Usable (1u << 0) |
| #define bit_arch_FPU_Usable (1u << 0) |
| #define bit_arch_TSC_Usable (1u << 0) |
| @@ -236,7 +237,6 @@ extern const struct cpu_features *__get_cpu_features (void) |
| #define index_arch_AES_Usable FEATURE_INDEX_1 |
| #define index_arch_XSAVE_Usable FEATURE_INDEX_1 |
| #define index_arch_OSXSAVE_Usable FEATURE_INDEX_1 |
| -#define index_arch_F16C_Usable FEATURE_INDEX_1 |
| #define index_arch_RDRAND_Usable FEATURE_INDEX_1 |
| #define index_arch_FPU_Usable FEATURE_INDEX_1 |
| #define index_arch_TSC_Usable FEATURE_INDEX_1 |
| @@ -296,7 +296,7 @@ extern const struct cpu_features *__get_cpu_features (void) |
| #define need_arch_feature_XSAVE 0 |
| #define need_arch_feature_OSXSAVE 0 |
| #define need_arch_feature_AVX 1 |
| -#define need_arch_feature_F16C 0 |
| +#define need_arch_feature_F16C 1 |
| #define need_arch_feature_RDRAND 0 |
| |
| /* EDX. */ |