target/i386: Add {hw,sw}_reserved to X86LegacyXSaveArea

This completes the 512 byte structure, allowing the union to
be removed.  Assert that the structure layout is as expected.

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2024-04-08 09:55:21 -10:00
parent a2d64d61c1
commit 6dba8b471c

View File

@ -1425,23 +1425,34 @@ typedef struct {
*/ */
#define UNASSIGNED_APIC_ID 0xFFFFFFFF #define UNASSIGNED_APIC_ID 0xFFFFFFFF
typedef union X86LegacyXSaveArea { typedef struct X86LegacyXSaveArea {
struct {
uint16_t fcw; uint16_t fcw;
uint16_t fsw; uint16_t fsw;
uint8_t ftw; uint8_t ftw;
uint8_t reserved; uint8_t reserved;
uint16_t fpop; uint16_t fpop;
union {
struct {
uint64_t fpip; uint64_t fpip;
uint64_t fpdp; uint64_t fpdp;
};
struct {
uint32_t fip;
uint32_t fcs;
uint32_t foo;
uint32_t fos;
};
};
uint32_t mxcsr; uint32_t mxcsr;
uint32_t mxcsr_mask; uint32_t mxcsr_mask;
FPReg fpregs[8]; FPReg fpregs[8];
uint8_t xmm_regs[16][16]; uint8_t xmm_regs[16][16];
}; uint32_t hw_reserved[12];
uint8_t data[512]; uint32_t sw_reserved[12];
} X86LegacyXSaveArea; } X86LegacyXSaveArea;
QEMU_BUILD_BUG_ON(sizeof(X86LegacyXSaveArea) != 512);
typedef struct X86XSaveHeader { typedef struct X86XSaveHeader {
uint64_t xstate_bv; uint64_t xstate_bv;
uint64_t xcomp_bv; uint64_t xcomp_bv;