dump all supported CPU fetures into Bochs log from CPUID object
This commit is contained in:
parent
264b797363
commit
9bc7faf493
@ -26,6 +26,110 @@
|
||||
#include "param_names.h"
|
||||
#include "cpuid.h"
|
||||
|
||||
static const char *cpu_feature_name[]
|
||||
{
|
||||
"386ni", // BX_ISA_386
|
||||
"x87", // BX_ISA_X87
|
||||
"486ni", // BX_ISA_486
|
||||
"pentium_ni", // BX_ISA_PENTIUM
|
||||
"p6ni", // BX_ISA_P6
|
||||
"mmx", // BX_ISA_MMX
|
||||
"3dnow!", // BX_ISA_3DNOW
|
||||
"debugext", // BX_ISA_DEBUG_EXTENSIONS
|
||||
"vme", // BX_ISA_VME
|
||||
"pse", // BX_ISA_PSE
|
||||
"pae", // BX_ISA_PAE
|
||||
"pge", // BX_ISA_PGE
|
||||
"pse36", // BX_ISA_PSE36
|
||||
"mtrr", // BX_ISA_MTRR
|
||||
"pat", // BX_ISA_PAT
|
||||
"legacy_syscall_sysret", // BX_ISA_SYSCALL_SYSRET_LEGACY
|
||||
"sysenter_sysexit", // BX_ISA_SYSENTER_SYSEXIT
|
||||
"clflush", // BX_ISA_CLFLUSH
|
||||
"clflushout", // BX_ISA_CLFLUSHOPT
|
||||
"clwb", // BX_ISA_CLWB
|
||||
"cldemote", // BX_ISA_CLDEMOTE
|
||||
"sse", // BX_ISA_SSE
|
||||
"sse2", // BX_ISA_SSE2
|
||||
"sse3", // BX_ISA_SSE3
|
||||
"ssse3", // BX_ISA_SSSE3
|
||||
"sse4_1", // BX_ISA_SSE4_1
|
||||
"sse4_2", // BX_ISA_SSE4_2
|
||||
"popcnt", // BX_ISA_POPCNT
|
||||
"mwait", // BX_ISA_MONITOR_MWAIT
|
||||
"mwaitx", // BX_ISA_MONITORX_MWAITX
|
||||
"waitpkg", // BX_ISA_WAITPKG
|
||||
"vmx", // BX_ISA_VMX
|
||||
"smx", // BX_ISA_SMX
|
||||
"longmode", // BX_ISA_LONG_MODE
|
||||
"lm_lahf_sahf", // BX_ISA_LM_LAHF_SAHF
|
||||
"nx", // BX_ISA_NX
|
||||
"1g_pages", // BX_ISA_1G_PAGES
|
||||
"cmpxhg16b", // BX_ISA_CMPXCHG16B
|
||||
"rdtscp", // BX_ISA_RDTSCP
|
||||
"ffxsr", // BX_ISA_FFXSR
|
||||
"xsave", // BX_ISA_XSAVE
|
||||
"xsaveopt", // BX_ISA_XSAVEOPT
|
||||
"xsavec", // BX_ISA_XSAVEC
|
||||
"xsaves", // BX_ISA_XSAVES
|
||||
"aes_pclmulqdq", // BX_ISA_AES_PCLMULQDQ
|
||||
"vaes_vpclmulqdq", // BX_ISA_VAES_VPCLMULQDQ
|
||||
"movbe", // BX_ISA_MOVBE
|
||||
"fsgsbase", // BX_ISA_FSGSBASE
|
||||
"invpcid", // BX_ISA_INVPCID
|
||||
"avx", // BX_ISA_AVX
|
||||
"avx2", // BX_ISA_AVX2
|
||||
"avx_f16c", // BX_ISA_AVX_F16C
|
||||
"avx_fma", // BX_ISA_AVX_FMA
|
||||
"altmovcr8", // BX_ISA_ALT_MOV_CR8
|
||||
"sse4a", // BX_ISA_SSE4A
|
||||
"misaligned_sse", // BX_ISA_MISALIGNED_SSE
|
||||
"lzcnt", // BX_ISA_LZCNT
|
||||
"bmi1", // BX_ISA_BMI1
|
||||
"bmi2", // BX_ISA_BMI2
|
||||
"fma4", // BX_ISA_FMA4
|
||||
"xop", // BX_ISA_XOP
|
||||
"tbm", // BX_ISA_TBM
|
||||
"svm", // BX_ISA_SVM
|
||||
"rdrand", // BX_ISA_RDRAND
|
||||
"adx", // BX_ISA_ADX
|
||||
"smap", // BX_ISA_SMAP
|
||||
"rdseed", // BX_ISA_RDSEED
|
||||
"sha", // BX_ISA_SHA
|
||||
"gfni", // BX_ISA_GFNI
|
||||
"avx512", // BX_ISA_AVX512
|
||||
"avx512cd", // BX_ISA_AVX512_CD
|
||||
"avx512pf", // BX_ISA_AVX512_PF
|
||||
"avx512er", // BX_ISA_AVX512_ER
|
||||
"avx512dq", // BX_ISA_AVX512_DQ
|
||||
"avx512bw", // BX_ISA_AVX512_BW
|
||||
"avx512vl", // BX_ISA_AVX512_VL
|
||||
"avx512vbmi", // BX_ISA_AVX512_VBMI
|
||||
"avx512vbmi2", // BX_ISA_AVX512_VBMI2
|
||||
"avx512ifma52", // BX_ISA_AVX512_IFMA52
|
||||
"avx512ivpopcnt", // BX_ISA_AVX512_VPOPCNTDQ
|
||||
"avx512ivnni", // BX_ISA_AVX512_VNNI
|
||||
"avx512ibitalg", // BX_ISA_AVX512_BITALG
|
||||
"xapic", // BX_ISA_XAPIC
|
||||
"x2apic", // BX_ISA_X2APIC
|
||||
"xapicext", // BX_ISA_XAPICEXT
|
||||
"pcid", // BX_ISA_PCID
|
||||
"smep", // BX_ISA_SMEP
|
||||
"tsc_deadline", // BX_ISA_TSC_DEADLINE
|
||||
"fopcode_deprecation", // BX_ISA_FOPCODE_DEPRECATION
|
||||
"fcs_fds_deprecation", // BX_ISA_FCS_FDS_DEPRECATION
|
||||
"fdp_deprecation", // BX_ISA_FDP_DEPRECATION
|
||||
"pku", // BX_ISA_PKU
|
||||
"umip", // BX_ISA_UMIP
|
||||
"rdpid", // BX_ISA_RDPID
|
||||
"tce", // BX_ISA_TCE
|
||||
"clzero", // BX_ISA_CLZERO
|
||||
"movdiri", // BX_ISA_MOVDIRI
|
||||
"movdiri64", // BX_ISA_MOVDIRI64
|
||||
};
|
||||
|
||||
const char *get_cpu_feature_name(unsigned feature) { return cpu_feature_name[feature]; }
|
||||
|
||||
#define LOG_THIS cpu->
|
||||
bx_cpuid_t::bx_cpuid_t(BX_CPU_C *_cpu): cpu(_cpu)
|
||||
{
|
||||
@ -34,13 +138,13 @@ bx_cpuid_t::bx_cpuid_t(BX_CPU_C *_cpu): cpu(_cpu)
|
||||
|
||||
#if BX_SUPPORT_VMX
|
||||
bx_cpuid_t::bx_cpuid_t(BX_CPU_C *_cpu, Bit32u vmcs_revision):
|
||||
cpu(_cpu), vmcs_map(vmcs_revision)
|
||||
cpu(_cpu), vmcs_map(vmcs_revision)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
bx_cpuid_t::bx_cpuid_t(BX_CPU_C *_cpu, Bit32u vmcs_revision, const char *filename):
|
||||
cpu(_cpu), vmcs_map(vmcs_revision, filename)
|
||||
cpu(_cpu), vmcs_map(vmcs_revision, filename)
|
||||
{
|
||||
init();
|
||||
}
|
||||
@ -434,3 +538,11 @@ void bx_cpuid_t::warning_messages(unsigned extension) const
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void bx_cpuid_t::dump_features() const
|
||||
{
|
||||
BX_INFO(("CPU Features supported:"));
|
||||
for (unsigned i=1; i<BX_ISA_EXTENSION_LAST; i++)
|
||||
if (is_cpu_extension_supported(i))
|
||||
BX_INFO(("\t\t%s", cpu_feature_name[i]));
|
||||
}
|
||||
|
@ -68,6 +68,8 @@ public:
|
||||
|
||||
virtual void dump_cpuid(void) const = 0;
|
||||
|
||||
void dump_features() const;
|
||||
|
||||
#if BX_CPU_LEVEL >= 5
|
||||
virtual int rdmsr(Bit32u index, Bit64u *msr) { return -1; }
|
||||
virtual int wrmsr(Bit32u index, Bit64u msr) { return -1; }
|
||||
@ -137,6 +139,8 @@ protected:
|
||||
#endif
|
||||
};
|
||||
|
||||
extern const char *get_cpu_feature_name(unsigned feature);
|
||||
|
||||
typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
|
||||
|
||||
// cpuid VMX features
|
||||
|
@ -23,7 +23,7 @@
|
||||
#define BX_X86_DECODER_H
|
||||
|
||||
// x86 Arch features
|
||||
enum {
|
||||
enum x86_feature_name {
|
||||
BX_ISA_386 = 0, /* 386 or earlier instruction */
|
||||
BX_ISA_X87, /* FPU (X87) instruction */
|
||||
BX_ISA_486, /* 486 new instruction */
|
||||
|
@ -1050,6 +1050,8 @@ void BX_CPU_C::reset(unsigned source)
|
||||
BX_CPU_THIS_PTR cpuid->dump_cpuid();
|
||||
#endif
|
||||
|
||||
BX_CPU_THIS_PTR cpuid->dump_features();
|
||||
|
||||
BX_INSTR_RESET(BX_CPU_ID, source);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user