backend/x64: Bugfix: A32 frontent also uses FPSCR.QC

This commit is contained in:
merry 2022-02-12 21:46:45 +00:00
parent 473bbd422e
commit 95a1ebfb97
2 changed files with 3 additions and 1 deletions

View file

@ -172,6 +172,7 @@ u32 A32JitState::Fpscr() const {
FPSCR |= (mxcsr & 0b0000000000001); // IOC = IE FPSCR |= (mxcsr & 0b0000000000001); // IOC = IE
FPSCR |= (mxcsr & 0b0000000111100) >> 1; // IXC, UFC, OFC, DZC = PE, UE, OE, ZE FPSCR |= (mxcsr & 0b0000000111100) >> 1; // IXC, UFC, OFC, DZC = PE, UE, OE, ZE
FPSCR |= fpsr_exc; FPSCR |= fpsr_exc;
FPSCR |= fpsr_qc != 0 ? 1 << 27 : 0;
return FPSCR; return FPSCR;
} }
@ -184,6 +185,7 @@ void A32JitState::SetFpscr(u32 FPSCR) {
upper_location_descriptor |= FPSCR & FPSCR_MODE_MASK; upper_location_descriptor |= FPSCR & FPSCR_MODE_MASK;
fpsr_nzcv = FPSCR & FPSCR_NZCV_MASK; fpsr_nzcv = FPSCR & FPSCR_NZCV_MASK;
fpsr_qc = (FPSCR >> 27) & 1;
guest_MXCSR = 0x00001f80; guest_MXCSR = 0x00001f80;
asimd_MXCSR = 0x00009fc0; asimd_MXCSR = 0x00009fc0;

View file

@ -53,7 +53,7 @@ struct A32JitState {
void ResetRSB(); void ResetRSB();
u32 fpsr_exc = 0; u32 fpsr_exc = 0;
u32 fpsr_qc = 0; // Dummy value u32 fpsr_qc = 0;
u32 fpsr_nzcv = 0; u32 fpsr_nzcv = 0;
u32 Fpscr() const; u32 Fpscr() const;
void SetFpscr(u32 FPSCR); void SetFpscr(u32 FPSCR);