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:
parent
3762e6c219
commit
3a9e4b7cf4
2 changed files with 68 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
Loading…
Add table
Reference in a new issue