Use the correct fxsave type for x86_64.

No functional change.

TEST=snapshot_test SystemSnapshotMacTest.CPUX86SupportsDAZ
R=rsesek@chromium.org

Review URL: https://codereview.chromium.org/623343004
This commit is contained in:
Mark Mentovai 2014-10-06 13:47:10 -04:00
parent 0ff46a4e60
commit 56503fef86
2 changed files with 26 additions and 5 deletions

View File

@ -96,19 +96,36 @@ struct CPUContextX86_64 {
typedef CPUContextX86::X87OrMMXRegister X87OrMMXRegister;
typedef CPUContextX86::XMMRegister XMMRegister;
struct Fxsave64 {
struct Fxsave {
uint16_t fcw; // FPU control word
uint16_t fsw; // FPU status word
uint8_t ftw; // abridged FPU tag word
uint8_t reserved_1;
uint16_t fop; // FPU opcode
uint64_t fpu_ip; // FPU instruction pointer
uint64_t fpu_dp; // FPU data pointer
union {
// The expression of these union members is determined by the use of
// fxsave/fxrstor or fxsave64/fxrstor64 (fxsaveq/fxrstorq). Mac OS X and
// Windows systems use the traditional fxsave/fxrstor structure.
struct {
// fxsave/fxrstor
uint32_t fpu_ip; // FPU instruction pointer offset
uint16_t fpu_cs; // FPU instruction pointer segment selector
uint16_t reserved_2;
uint32_t fpu_dp; // FPU data pointer offset
uint16_t fpu_ds; // FPU data pointer segment selector
uint16_t reserved_3;
};
struct {
// fxsave64/fxrstor64 (fxsaveq/fxrstorq)
uint64_t fpu_ip_64; // FPU instruction pointer
uint64_t fpu_dp_64; // FPU data pointer
};
};
uint32_t mxcsr; // multimedia extensions status and control register
uint32_t mxcsr_mask; // valid bits in mxcsr
X87OrMMXRegister st_mm[8];
XMMRegister xmm[16];
uint8_t reserved_2[48];
uint8_t reserved_4[48];
uint8_t available[48];
};
@ -136,7 +153,7 @@ struct CPUContextX86_64 {
uint16_t gs;
// Floating-point and vector registers.
Fxsave64 fxsave64;
Fxsave fxsave;
// Debug registers.
uint64_t dr0;

View File

@ -270,7 +270,11 @@ bool SystemSnapshotMac::CPUX86SupportsDAZ() const {
}
// Call fxsave.
#if defined(ARCH_CPU_X86)
CPUContextX86::Fxsave fxsave __attribute__((aligned(16))) = {};
#elif defined(ARCH_CPU_X86_64)
CPUContextX86_64::Fxsave fxsave __attribute__((aligned(16))) = {};
#endif
static_assert(sizeof(fxsave) == 512, "fxsave size");
static_assert(offsetof(decltype(fxsave), mxcsr_mask) == 28,
"mxcsr_mask offset");