mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
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.
This commit is contained in:
@ -174,15 +174,24 @@ do_test (void)
|
||||
CHECK_CPU_FEATURE (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE (MOVDIRI);
|
||||
CHECK_CPU_FEATURE (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE (ENQCMD);
|
||||
CHECK_CPU_FEATURE (SGX_LC);
|
||||
CHECK_CPU_FEATURE (PKS);
|
||||
CHECK_CPU_FEATURE (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE (FSRM);
|
||||
CHECK_CPU_FEATURE (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE (MD_CLEAR);
|
||||
CHECK_CPU_FEATURE (SERIALIZE);
|
||||
CHECK_CPU_FEATURE (HYBRID);
|
||||
CHECK_CPU_FEATURE (TSXLDTRK);
|
||||
CHECK_CPU_FEATURE (PCONFIG);
|
||||
CHECK_CPU_FEATURE (IBT);
|
||||
CHECK_CPU_FEATURE (IBRS_IBPB);
|
||||
CHECK_CPU_FEATURE (STIBP);
|
||||
CHECK_CPU_FEATURE (CAPABILITIES);
|
||||
CHECK_CPU_FEATURE (L1D_FLUSH);
|
||||
CHECK_CPU_FEATURE (ARCH_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE (CORE_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE (SSBD);
|
||||
CHECK_CPU_FEATURE (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE (SVM);
|
||||
@ -204,84 +213,36 @@ do_test (void)
|
||||
CHECK_CPU_FEATURE (XSAVES);
|
||||
CHECK_CPU_FEATURE (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE (WBNOINVD);
|
||||
CHECK_CPU_FEATURE (AVX512_BF16);
|
||||
|
||||
printf ("Usable CPU features:\n");
|
||||
CHECK_CPU_FEATURE_USABLE (SSE3);
|
||||
CHECK_CPU_FEATURE_USABLE (PCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (SSSE3);
|
||||
CHECK_CPU_FEATURE_USABLE (FMA);
|
||||
CHECK_CPU_FEATURE_USABLE (CMPXCHG16B);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4_1);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4_2);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVBE);
|
||||
CHECK_CPU_FEATURE_USABLE (POPCNT);
|
||||
CHECK_CPU_FEATURE_USABLE (AES);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVE);
|
||||
CHECK_CPU_FEATURE_USABLE (OSXSAVE);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX);
|
||||
CHECK_CPU_FEATURE_USABLE (F16C);
|
||||
CHECK_CPU_FEATURE_USABLE (RDRAND);
|
||||
CHECK_CPU_FEATURE_USABLE (FPU);
|
||||
CHECK_CPU_FEATURE_USABLE (TSC);
|
||||
CHECK_CPU_FEATURE_USABLE (MSR);
|
||||
CHECK_CPU_FEATURE_USABLE (CX8);
|
||||
CHECK_CPU_FEATURE_USABLE (SEP);
|
||||
CHECK_CPU_FEATURE_USABLE (CMOV);
|
||||
CHECK_CPU_FEATURE_USABLE (CLFSH);
|
||||
CHECK_CPU_FEATURE_USABLE (MMX);
|
||||
CHECK_CPU_FEATURE_USABLE (FXSR);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE2);
|
||||
CHECK_CPU_FEATURE_USABLE (FSGSBASE);
|
||||
CHECK_CPU_FEATURE_USABLE (BMI1);
|
||||
CHECK_CPU_FEATURE_USABLE (HLE);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX2);
|
||||
CHECK_CPU_FEATURE_USABLE (BMI2);
|
||||
CHECK_CPU_FEATURE_USABLE (ERMS);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512F);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512DQ);
|
||||
CHECK_CPU_FEATURE_USABLE (RDSEED);
|
||||
CHECK_CPU_FEATURE_USABLE (ADX);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_IFMA);
|
||||
CHECK_CPU_FEATURE_USABLE (CLFLUSHOPT);
|
||||
CHECK_CPU_FEATURE_USABLE (CLWB);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512PF);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512ER);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512CD);
|
||||
CHECK_CPU_FEATURE_USABLE (SHA);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512BW);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512VL);
|
||||
CHECK_CPU_FEATURE_USABLE (PREFETCHWT1);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VBMI);
|
||||
CHECK_CPU_FEATURE_USABLE (PKU);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VBMI2);
|
||||
CHECK_CPU_FEATURE_USABLE (GFNI);
|
||||
CHECK_CPU_FEATURE_USABLE (VAES);
|
||||
CHECK_CPU_FEATURE_USABLE (VPCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VNNI);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_BITALG);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VPOPCNTDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (RDPID);
|
||||
CHECK_CPU_FEATURE_USABLE (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVDIRI);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE_USABLE (FSRM);
|
||||
CHECK_CPU_FEATURE_USABLE (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE_USABLE (LZCNT);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4A);
|
||||
CHECK_CPU_FEATURE_USABLE (PREFETCHW);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE_USABLE (XOP);
|
||||
CHECK_CPU_FEATURE_USABLE (FMA4);
|
||||
CHECK_CPU_FEATURE_USABLE (TBM);
|
||||
CHECK_CPU_FEATURE_USABLE (SYSCALL_SYSRET);
|
||||
CHECK_CPU_FEATURE_USABLE (RDTSCP);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVEOPT);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVEC);
|
||||
CHECK_CPU_FEATURE_USABLE (XGETBV_ECX_1);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVES);
|
||||
CHECK_CPU_FEATURE_USABLE (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE_USABLE (WBNOINVD);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_BF16);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user