[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH][XTF] add FPU/SIMD register state test
>>> On 14.03.17 at 12:36, <andrew.cooper3@xxxxxxxxxx> wrote: > On 13/03/17 11:07, Jan Beulich wrote: >> Add tests to verify that >> - FPU insns leave correct (guest) values in FIP/FDP/FOP/FCS/FDS, >> - FPU insns writing memory don't update FPU register state when the >> write faults (at the example of FISTP), >> - VCVTPS2PH (once implemented in the emulator) doesn't update MXCSR >> if its write faults (VCVTPS2PH currently is the only SIMD insn >> writing to memory and updating register state). >> >> Note that the AMD-specific code in fpu_fxrstor() and xrstor() causes >> the FISTP part of this test to always fail. I don't really have any >> idea what to do about this (other than perhaps skipping the test on AMD >> altogether). >> >> Note further that the FCS part of 64-bit variant of the FSTP test also >> always fails on AMD, since, other than on Intel, {F,}XRSTOR with REX.W >> set do not appear to clear FCS/FDS (I can't find any statement either >> way in the PM). >> >> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> >> --- >> TBD: It is not clear to me how to deal with the native execution >> failure of VCVTPS2PH on at least some Intel models. > > As a general comment, tests dealing with quirks like this should > tolerate real hardware behaviour, without causing the test to fail. > There is nothing useful from having tests failing in cases we cant/wont > do anything to fix. > > As for the Intel behaviour, Is this documented, or does it have an > erratum reference? Neither - I am waiting for them to confirm whether this is an erratum, or whether (for some strange reason) this is intended behavior. > For the AMD behaviour, some more though is going to be required. One option I've been considering was to dynamically select between xtf_failure() and xtf_warning() for the problematic checks. >> +void probe_fstp(bool force) >> +{ >> + const uint8_t *fstp_offs; >> + uint32_t flt; >> + struct x87_env fenv; >> + >> + fenv.cw = 0x35f; /* unmask PE */ >> + asm volatile ( "fninit;" >> + "fldcw %[cw];" >> + "fldpi;" >> + "mov $1f, %[offs];" > > You can have the compiler do all of this by using a named label, and using > > extern char fstp_offs[] asm("$label"); Is there any benefit to this? To me this looks uglier than what I have now. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |