mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 10:13:56 -06:00
target/i386: Populate x86_ext_save_areas offsets using cpuid where possible
Rather than relying on the X86XSaveArea structure definition, determine the offset of XSAVE state areas using CPUID leaf 0xd where possible (KVM and HVF). Signed-off-by: David Edmondson <david.edmondson@oracle.com> Message-Id: <20210705104632.2902400-8-david.edmondson@oracle.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
3568987f78
commit
fea4500841
7 changed files with 94 additions and 13 deletions
|
@ -1304,48 +1304,37 @@ static const X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = {
|
|||
};
|
||||
#undef REGISTER
|
||||
|
||||
const ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = {
|
||||
ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = {
|
||||
[XSTATE_FP_BIT] = {
|
||||
/* x87 FP state component is always enabled if XSAVE is supported */
|
||||
.feature = FEAT_1_ECX, .bits = CPUID_EXT_XSAVE,
|
||||
/* x87 state is in the legacy region of the XSAVE area */
|
||||
.offset = 0,
|
||||
.size = sizeof(X86LegacyXSaveArea) + sizeof(X86XSaveHeader),
|
||||
},
|
||||
[XSTATE_SSE_BIT] = {
|
||||
/* SSE state component is always enabled if XSAVE is supported */
|
||||
.feature = FEAT_1_ECX, .bits = CPUID_EXT_XSAVE,
|
||||
/* SSE state is in the legacy region of the XSAVE area */
|
||||
.offset = 0,
|
||||
.size = sizeof(X86LegacyXSaveArea) + sizeof(X86XSaveHeader),
|
||||
},
|
||||
[XSTATE_YMM_BIT] =
|
||||
{ .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX,
|
||||
.offset = offsetof(X86XSaveArea, avx_state),
|
||||
.size = sizeof(XSaveAVX) },
|
||||
[XSTATE_BNDREGS_BIT] =
|
||||
{ .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX,
|
||||
.offset = offsetof(X86XSaveArea, bndreg_state),
|
||||
.size = sizeof(XSaveBNDREG) },
|
||||
[XSTATE_BNDCSR_BIT] =
|
||||
{ .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX,
|
||||
.offset = offsetof(X86XSaveArea, bndcsr_state),
|
||||
.size = sizeof(XSaveBNDCSR) },
|
||||
[XSTATE_OPMASK_BIT] =
|
||||
{ .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
|
||||
.offset = offsetof(X86XSaveArea, opmask_state),
|
||||
.size = sizeof(XSaveOpmask) },
|
||||
[XSTATE_ZMM_Hi256_BIT] =
|
||||
{ .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
|
||||
.offset = offsetof(X86XSaveArea, zmm_hi256_state),
|
||||
.size = sizeof(XSaveZMM_Hi256) },
|
||||
[XSTATE_Hi16_ZMM_BIT] =
|
||||
{ .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F,
|
||||
.offset = offsetof(X86XSaveArea, hi16_zmm_state),
|
||||
.size = sizeof(XSaveHi16_ZMM) },
|
||||
[XSTATE_PKRU_BIT] =
|
||||
{ .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU,
|
||||
.offset = offsetof(X86XSaveArea, pkru_state),
|
||||
.size = sizeof(XSavePKRU) },
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue