diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-06-17 06:34:46 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-06-22 13:09:33 -0700 |
commit | ecbbadbf107ea1155ae5b71a8b7bd48f38c76731 (patch) | |
tree | edc19a18074492532661cf40364d633ac39e75b8 /sysdeps/unix/sysv/linux/x86_64/64 | |
parent | ea04f0213135b13d80f568ca2c4127c2ec112537 (diff) | |
download | glibc-ecbbadbf107ea1155ae5b71a8b7bd48f38c76731.tar.gz glibc-ecbbadbf107ea1155ae5b71a8b7bd48f38c76731.tar.xz glibc-ecbbadbf107ea1155ae5b71a8b7bd48f38c76731.zip |
x86: Update CPU feature detection [BZ #26149]
1. Divide architecture features into the usable features and the preferred features. The usable features are for correctness and can be exported in a stable ABI. The preferred features are for performance and only for glibc internal use. 2. Change struct cpu_features to struct cpu_features { struct cpu_features_basic basic; unsigned int *usable_p; struct cpuid_registers cpuid[COMMON_CPUID_INDEX_MAX]; unsigned int usable[USABLE_FEATURE_INDEX_MAX]; unsigned int preferred[PREFERRED_FEATURE_INDEX_MAX]; ... }; and initialize usable_p to pointer to the usable arary so that struct cpu_features { struct cpu_features_basic basic; unsigned int *usable_p; struct cpuid_registers cpuid[COMMON_CPUID_INDEX_MAX]; }; can be exported via a stable ABI. The cpuid and usable arrays can be expanded with backward binary compatibility for both .o and .so files. 3. Add COMMON_CPUID_INDEX_7_ECX_1 for AVX512_BF16. 4. Detect ENQCMD, PKS, AVX512_VP2INTERSECT, MD_CLEAR, SERIALIZE, HYBRID, TSXLDTRK, L1D_FLUSH, CORE_CAPABILITIES and AVX512_BF16. 5. Rename CAPABILITIES to ARCH_CAPABILITIES. 6. Check if AVX512_VP2INTERSECT, AVX512_BF16 and PKU are usable. 7. Update CPU feature detection test.
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86_64/64')
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h index eeb2a4854d..8205ad11e6 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h +++ b/sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h @@ -33,7 +33,7 @@ case 21: \ if (!__libc_enable_secure \ && memcmp (envline, "PREFER_MAP_32BIT_EXEC", 21) == 0) \ - GLRO(dl_x86_cpu_features).feature[index_arch_Prefer_MAP_32BIT_EXEC] \ + GLRO(dl_x86_cpu_features).preferred[index_arch_Prefer_MAP_32BIT_EXEC] \ |= bit_arch_Prefer_MAP_32BIT_EXEC; \ break; |