update CPUID bits and CR bits according to recently published SDM documents by Intel

This commit is contained in:
Stanislav Shwartsman 2020-10-03 07:59:47 +00:00
parent 8e0541fe5a
commit a378441254
3 changed files with 40 additions and 19 deletions

View File

@ -1023,12 +1023,13 @@ void bx_dbg_info_control_regs_command(void)
dbg_printf(" PWT=page-level write-through=%d\n", (cr3>>3) & 1);
#if BX_CPU_LEVEL >= 5
Bit32u cr4 = SIM->get_param_num("CR4", dbg_cpu_list)->get();
dbg_printf("CR4=0x%08x: %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", cr4,
dbg_printf("CR4=0x%08x: %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", cr4,
(cr4 & (1<<24)) ? "PKS" : "pks",
(cr4 & (1<<23)) ? "CET" : "cet",
(cr4 & (1<<22)) ? "PKE" : "pke",
(cr4 & (1<<21)) ? "SMAP" : "smap",
(cr4 & (1<<20)) ? "SMEP" : "smep",
(cr4 & (1<<19)) ? "KEYLOCK" : "keylock",
(cr4 & (1<<18)) ? "OSXSAVE" : "osxsave",
(cr4 & (1<<17)) ? "PCID" : "pcid",
(cr4 & (1<<16)) ? "FSGSBASE" : "fsgsbase",
@ -1063,16 +1064,18 @@ void bx_dbg_info_control_regs_command(void)
#if BX_CPU_LEVEL >= 6
if (BX_CPU(dbg_cpu)->is_cpu_extension_supported(BX_ISA_XSAVE)) {
Bit32u xcr0 = SIM->get_param_num("XCR0", dbg_cpu_list)->get();
dbg_printf("XCR0=0x%08x: %s %s %s %s %s %s %s %s %s\n", xcr0,
(xcr0 & (1<<9)) ? "PKRU" : "pkru",
(xcr0 & (1<<7)) ? "HI_ZMM" : "hi_zmm",
(xcr0 & (1<<6)) ? "ZMM_HI256" : "zmm_hi256",
(xcr0 & (1<<5)) ? "OPMASK" : "opmask",
(xcr0 & (1<<4)) ? "BNDCFG" : "bndcfg",
(xcr0 & (1<<3)) ? "BNDREGS" : "bndregs",
(xcr0 & (1<<2)) ? "YMM" : "ymm",
(xcr0 & (1<<1)) ? "SSE" : "sse",
(xcr0 & (1<<0)) ? "FPU" : "fpu");
dbg_printf("XCR0=0x%08x: %s %s %s %s %s %s %s %s %s %s %s\n", xcr0,
(xcr0 & (1<<11)) ? "CET_S" : "cet_s",
(xcr0 & (1<<10)) ? "CET_U" : "cet_u",
(xcr0 & (1<<9)) ? "PKRU" : "pkru",
(xcr0 & (1<<7)) ? "HI_ZMM" : "hi_zmm",
(xcr0 & (1<<6)) ? "ZMM_HI256" : "zmm_hi256",
(xcr0 & (1<<5)) ? "OPMASK" : "opmask",
(xcr0 & (1<<4)) ? "BNDCFG" : "bndcfg",
(xcr0 & (1<<3)) ? "BNDREGS" : "bndregs",
(xcr0 & (1<<2)) ? "YMM" : "ymm",
(xcr0 & (1<<1)) ? "SSE" : "sse",
(xcr0 & (1<<0)) ? "FPU" : "fpu");
}
#endif
}

View File

@ -400,6 +400,7 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
// [16:16] LA57: LA57 and 5-level paging
// [21:17] reserved
// [22:22] RDPID: Read Processor ID support
// [23:23] Keylocker
// [24:23] reserved
// [25:25] CLDEMOTE: CLDEMOTE instruction support
// [26:26] reserved
@ -432,7 +433,7 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
#define BX_CPUID_EXT4_RESERVED20 (1 << 20)
#define BX_CPUID_EXT4_RESERVED21 (1 << 21)
#define BX_CPUID_EXT4_RDPID (1 << 22)
#define BX_CPUID_EXT4_RESERVED23 (1 << 23)
#define BX_CPUID_EXT4_KEYLOCKER (1 << 23)
#define BX_CPUID_EXT4_RESERVED24 (1 << 24)
#define BX_CPUID_EXT4_CLDEMOTE (1 << 25)
#define BX_CPUID_EXT4_RESERVED26 (1 << 26)
@ -448,7 +449,8 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
// [2:2] AVX512 4VNNIW instructions support
// [3:3] AVX512 4FMAPS instructions support
// [4:4] Support of Fast REP MOV instructions with short length
// [7:5] reserved
// [5:5] UINTR: User interrupts support
// [7:6] reserved
// [8:8] AVX512 VP2INTERSECT instructions support
// [9:9] reserved
// [10:10] MD clear
@ -458,7 +460,11 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
// [16:16] TSXLDTRK: TSX suspent load tracking support
// [19:17] reserved
// [20:20] CET IBT: Support CET indirect branch tracking
// [25:21] reserved
// [21:21] reserved
// [22:22] AMX BF16 support
// [23:23] AVX512_FP16 instructions support
// [24:24] AMX TILE architecture support
// [25:25] AMX INT8 support
// [26:26] IBRS and IBPB: Indirect branch restricted speculation (SCA)
// [27:27] STIBP: Single Thread Indirect Branch Predictors supported (SCA)
// [28:28] L1D_FLUSH supported (SCA)
@ -471,7 +477,7 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
#define BX_CPUID_EXT5_AVX512_4VNNIW (1 << 2)
#define BX_CPUID_EXT5_AVX512_4FMAPS (1 << 3)
#define BX_CPUID_EXT5_FAST_SHORT_REP_MOV (1 << 4)
#define BX_CPUID_EXT5_RESERVED5 (1 << 5)
#define BX_CPUID_EXT5_UINTR (1 << 5)
#define BX_CPUID_EXT5_RESERVED6 (1 << 6)
#define BX_CPUID_EXT5_RESERVED7 (1 << 7)
#define BX_CPUID_EXT5_AVX512_VPINTERSECT (1 << 8)
@ -488,10 +494,10 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
#define BX_CPUID_EXT5_RESERVED19 (1 << 19)
#define BX_CPUID_EXT5_CET_IBT (1 << 20)
#define BX_CPUID_EXT5_RESERVED21 (1 << 21)
#define BX_CPUID_EXT5_RESERVED22 (1 << 22)
#define BX_CPUID_EXT5_RESERVED23 (1 << 23)
#define BX_CPUID_EXT5_RESERVED24 (1 << 24)
#define BX_CPUID_EXT5_RESERVED25 (1 << 25)
#define BX_CPUID_EXT5_AMX_BF16 (1 << 22)
#define BX_CPUID_EXT5_AVX512_FP16 (1 << 23)
#define BX_CPUID_EXT5_AMX_TILE (1 << 24)
#define BX_CPUID_EXT5_AMX_INT8 (1 << 25)
#define BX_CPUID_EXT5_SCA_IBRS_IBPB (1 << 26)
#define BX_CPUID_EXT5_SCA_STIBP (1 << 27)
#define BX_CPUID_EXT5_L1D_FLUSH (1 << 28)

View File

@ -106,6 +106,7 @@ struct bx_cr0_t {
#define BX_CR4_FSGSBASE_MASK (1 << 16)
#define BX_CR4_PCIDE_MASK (1 << 17)
#define BX_CR4_OSXSAVE_MASK (1 << 18)
#define BX_CR4_KEYLOCKER_MASK (1 << 19)
#define BX_CR4_SMEP_MASK (1 << 20)
#define BX_CR4_SMAP_MASK (1 << 21)
#define BX_CR4_PKE_MASK (1 << 22)
@ -137,6 +138,7 @@ struct bx_cr4_t {
#endif
IMPLEMENT_CRREG_ACCESSORS(PCIDE, 17);
IMPLEMENT_CRREG_ACCESSORS(OSXSAVE, 18);
IMPLEMENT_CRREG_ACCESSORS(KEYLOCKER, 19);
IMPLEMENT_CRREG_ACCESSORS(SMEP, 20);
IMPLEMENT_CRREG_ACCESSORS(SMAP, 21);
IMPLEMENT_CRREG_ACCESSORS(PKE, 22);
@ -275,6 +277,9 @@ struct xcr0_t {
BX_XCR0_PKRU_BIT = 9,
BX_XCR0_CET_U_BIT = 11,
BX_XCR0_CET_S_BIT = 12,
BX_XCR0_UINTR_BIT = 14,
BX_XCR0_XTILECFG_BIT = 17,
BX_XCR0_XTILEDATA_BIT = 18,
BX_XCR0_LAST
};
@ -290,6 +295,9 @@ struct xcr0_t {
#define BX_XCR0_PKRU_MASK (1 << xcr0_t::BX_XCR0_PKRU_BIT)
#define BX_XCR0_CET_U_MASK (1 << xcr0_t::BX_XCR0_CET_U_BIT)
#define BX_XCR0_CET_S_MASK (1 << xcr0_t::BX_XCR0_CET_S_BIT)
#define BX_XCR0_UINTR_MASK (1 << xcr0_t::BX_XCR0_UINTR_BIT)
#define BX_XCR0_XTILECFG_MASK (1 << xcr0_t::BX_XCR0_XTILECFG_BIT)
#define BX_XCR0_XTILEDATA_MASK (1 << xcr0_t::BX_XCR0_XTILEDATA_BIT)
IMPLEMENT_CRREG_ACCESSORS(FPU, BX_XCR0_FPU_BIT);
IMPLEMENT_CRREG_ACCESSORS(SSE, BX_XCR0_SSE_BIT);
@ -301,6 +309,10 @@ struct xcr0_t {
IMPLEMENT_CRREG_ACCESSORS(HI_ZMM, BX_XCR0_HI_ZMM_BIT);
IMPLEMENT_CRREG_ACCESSORS(PT, BX_XCR0_PT_BIT);
IMPLEMENT_CRREG_ACCESSORS(PKRU, BX_XCR0_PKRU_BIT);
IMPLEMENT_CRREG_ACCESSORS(CET_U, BX_XCR0_CET_U_BIT);
IMPLEMENT_CRREG_ACCESSORS(CET_S, BX_XCR0_CET_S_BIT);
IMPLEMENT_CRREG_ACCESSORS(XTILECFG, BX_XCR0_XTILECFG_BIT);
IMPLEMENT_CRREG_ACCESSORS(XTILEDATA, BX_XCR0_XTILEDATA_BIT);
BX_CPP_INLINE Bit32u get32() const { return val32; }
BX_CPP_INLINE void set32(Bit32u val) { val32 = val; }