1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

add detection of HLE, RTM and AVX512

This commit is contained in:
Stefan Lankes 2016-09-11 10:47:01 +02:00
parent 3762e6c219
commit 3a9e4b7cf4
2 changed files with 68 additions and 2 deletions

View file

@ -86,7 +86,28 @@ extern "C" {
// feature list 0x00000007:0
#define CPU_FEATURE_FSGSBASE (1 << 0)
#define CPU_FEATURE_TSC_ADJUST (1 << 1)
#define CPU_FEATURE_BMI1 (1 << 3)
#define CPU_FEATURE_HLE (1 << 4)
#define CPU_FEATURE_AVX2 (1 << 5)
#define CPU_FEATURE_SMEP (1 << 7)
#define CPU_FEATURE_BMI2 (1 << 8)
#define CPU_FEATURE_ERMS (1 << 9)
#define CPU_FEATURE_INVPCID (1 << 10)
#define CPU_FEATURE_RTM (1 << 11)
#define CPU_FEATURE_CQM (1 << 12)
#define CPU_FEATURE_MPX (1 << 14)
#define CPU_FEATURE_AVX512F (1 << 16)
#define CPU_FEATURE_RDSEED (1 << 18)
#define CPU_FEATURE_ADX (1 << 19)
#define CPU_FEATURE_SMAP (1 << 20)
#define CPU_FEATURE_PCOMMIT (1 << 22)
#define CPU_FEATURE_CLFLUSHOPT (1 << 23)
#define CPU_FEATURE_CLWB (1 << 24)
#define CPU_FEATURE_AVX512PF (1 << 26)
#define CPU_FEATURE_AVX512ER (1 << 27)
#define CPU_FEATURE_AVX512CD (1 << 28)
#define CPU_FEATURE_SHA_NI (1 << 29)
// feature list 0x00000006
#define CPU_FEATURE_IDA (1 << 0)
@ -380,6 +401,42 @@ inline static uint32_t has_avx2(void) {
return (cpu_info.feature4 & CPU_FEATURE_AVX2);
}
inline static uint32_t has_bmi1(void) {
return (cpu_info.feature4 & CPU_FEATURE_BMI1);
}
inline static uint32_t has_bmi2(void) {
return (cpu_info.feature4 & CPU_FEATURE_BMI2);
}
inline static uint32_t has_hle(void) {
return (cpu_info.feature4 & CPU_FEATURE_HLE);
}
inline static uint32_t has_cqm(void) {
return (cpu_info.feature4 & CPU_FEATURE_CQM);
}
inline static uint32_t has_rtm(void) {
return (cpu_info.feature4 & CPU_FEATURE_RTM);
}
inline static uint32_t has_avx512f(void) {
return (cpu_info.feature4 & CPU_FEATURE_AVX512F);
}
inline static uint32_t has_avx512pf(void) {
return (cpu_info.feature4 & CPU_FEATURE_AVX512PF);
}
inline static uint32_t has_avx512er(void) {
return (cpu_info.feature4 & CPU_FEATURE_AVX512ER);
}
inline static uint32_t has_avx512cd(void) {
return (cpu_info.feature4 & CPU_FEATURE_AVX512CD);
}
inline static uint32_t has_rdtscp(void) {
return (cpu_info.feature3 & CPU_FEATURE_RDTSCP);
}

View file

@ -470,7 +470,7 @@ int cpu_detection(void) {
a = b = c = d = 0;
cpuid(1, &a, &b, &cpu_info.feature2, &cpu_info.feature1);
kprintf("CPU features: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
kprintf("CPU features: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
has_sse() ? "SSE " : "",
has_sse2() ? "SSE2 " : "",
has_sse3() ? "SSE3 " : "",
@ -489,7 +489,16 @@ int cpu_detection(void) {
has_rdtscp() ? "RDTSCP " : "",
has_fsgsbase() ? "FSGSBASE " : "",
has_mwait() ? "MWAIT " : "",
has_dca() ? "DCA " : "");
has_bmi1() ? "BMI1 " : "",
has_bmi2() ? "BMI2 " : "",
has_dca() ? "DCA " : "",
has_rtm() ? "RTM " : "",
has_hle() ? "HLE " : "",
has_cqm() ? "CQM " : "",
has_avx512f() ? "AVX512F " : "",
has_avx512cd() ? "AVX512CD " : "",
has_avx512pf() ? "AVX512PF " : "",
has_avx512er() ? "AVX512ER " : "");
}
if (first_time && has_osxsave()) {