mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-21 19:20:50 +00:00
[X86] Improve the unknown stepping support for Intel CPUs in getHostCPUName
This patch improves our guessing of unknown Intel CPUs to support Goldmont and skylake-avx512. Differential Revision: https://reviews.llvm.org/D35161 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@309246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8d30f66962
commit
5e5b5e82eb
@ -380,7 +380,9 @@ enum ProcessorFeatures {
|
||||
// Only one bit free left in the first 32 features.
|
||||
FEATURE_MOVBE = 32,
|
||||
FEATURE_ADX,
|
||||
FEATURE_EM64T
|
||||
FEATURE_EM64T,
|
||||
FEATURE_CLFLUSHOPT,
|
||||
FEATURE_SHA,
|
||||
};
|
||||
|
||||
// The check below for i386 was copied from clang's cpuid.h (__get_cpuid_max).
|
||||
@ -714,7 +716,21 @@ getIntelProcessorTypeAndSubtype(unsigned Family, unsigned Model,
|
||||
|
||||
default: // Unknown family 6 CPU, try to guess.
|
||||
if (Features & (1 << FEATURE_AVX512F)) {
|
||||
*Type = INTEL_KNL; // knl
|
||||
if (Features & (1 << FEATURE_AVX512VL)) {
|
||||
*Type = INTEL_COREI7;
|
||||
*Subtype = INTEL_COREI7_SKYLAKE_AVX512;
|
||||
} else {
|
||||
*Type = INTEL_KNL; // knl
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (Features2 & (1 << (FEATURE_CLFLUSHOPT - 32))) {
|
||||
if (Features2 & (1 << (FEATURE_SHA - 32))) {
|
||||
*Type = INTEL_GOLDMONT;
|
||||
} else {
|
||||
*Type = INTEL_COREI7;
|
||||
*Subtype = INTEL_COREI7_SKYLAKE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (Features2 & (1 << (FEATURE_ADX - 32))) {
|
||||
@ -974,12 +990,16 @@ static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
|
||||
Features2 |= 1 << (FEATURE_ADX - 32);
|
||||
if (HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save)
|
||||
Features |= 1 << FEATURE_AVX512IFMA;
|
||||
if (HasLeaf7 && ((EBX >> 23) & 1))
|
||||
Features2 |= 1 << (FEATURE_CLFLUSHOPT - 32);
|
||||
if (HasLeaf7 && ((EBX >> 26) & 1) && HasAVX512Save)
|
||||
Features |= 1 << FEATURE_AVX512PF;
|
||||
if (HasLeaf7 && ((EBX >> 27) & 1) && HasAVX512Save)
|
||||
Features |= 1 << FEATURE_AVX512ER;
|
||||
if (HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save)
|
||||
Features |= 1 << FEATURE_AVX512CD;
|
||||
if (HasLeaf7 && ((EBX >> 29) & 1))
|
||||
Features2 |= 1 << (FEATURE_SHA - 32);
|
||||
if (HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save)
|
||||
Features |= 1 << FEATURE_AVX512BW;
|
||||
if (HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save)
|
||||
|
Loading…
x
Reference in New Issue
Block a user