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
typedef union X86LegacyXSaveArea {
struct {
uint16_t fcw;
uint16_t fsw;
uint8_t ftw;
uint8_t reserved;
uint16_t fpop;
uint64_t fpip;
uint64_t fpdp;
uint32_t mxcsr;
uint32_t mxcsr_mask;
FPReg fpregs[8];
uint8_t xmm_regs[16][16];
typedef struct X86LegacyXSaveArea {
uint16_t fcw;
uint16_t fsw;
uint8_t ftw;
uint8_t reserved;
uint16_t fpop;
union {
struct {
uint64_t fpip;
uint64_t fpdp;
};
struct {
uint32_t fip;
uint32_t fcs;
uint32_t foo;
uint32_t fos;
};
};
uint8_t data[512];
uint32_t mxcsr;
uint32_t mxcsr_mask;
FPReg fpregs[8];
uint8_t xmm_regs[16][16];
uint32_t hw_reserved[12];
uint32_t sw_reserved[12];
} X86LegacyXSaveArea;
QEMU_BUILD_BUG_ON(sizeof(X86LegacyXSaveArea) != 512);
typedef struct X86XSaveHeader {
uint64_t xstate_bv;
uint64_t xcomp_bv;