From c9bc6eac69a3ceea6dffe6cec07b17caa1e2fc6e Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Sun, 3 Jan 2021 12:03:55 +0000 Subject: [PATCH] mVU: Fix P flag instance on Ebit Also small fix for flag statuses on M-Bit on Branch --- pcsx2/x86/microVU_Branch.inl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pcsx2/x86/microVU_Branch.inl b/pcsx2/x86/microVU_Branch.inl index 6c47516081..d008a93da6 100644 --- a/pcsx2/x86/microVU_Branch.inl +++ b/pcsx2/x86/microVU_Branch.inl @@ -70,13 +70,12 @@ void mVUDTendProgram(mV, microFlagCycles* mFC, int isEbit) { xPSHUF.D(xmmPQ, xmmPQ, 0xe1); if (isVU1) { - xPSHUF.D(xmmPQ, xmmPQ, pInst ? 0x1b : 0x4e); + if (pInst) { xPSHUF.D(xmmPQ, xmmPQ, 0xb4); } // Swap Pending/Active P + xPSHUF.D(xmmPQ, xmmPQ, 0xC6); // 3 0 1 2 xMOVSS(ptr32[&mVU.regs().VI[REG_P].UL], xmmPQ); - xPSHUF.D(xmmPQ, xmmPQ, pInst ? 0x1b : 0x4e); - - xPSHUF.D(xmmPQ, xmmPQ, 0x1b); + xPSHUF.D(xmmPQ, xmmPQ, 0x87); // 0 2 1 3 xMOVSS(ptr32[&mVU.regs().pending_p], xmmPQ); - xPSHUF.D(xmmPQ, xmmPQ, 0x1b); + xPSHUF.D(xmmPQ, xmmPQ, 0x27); // 3 2 1 0 } // Save MAC, Status and CLIP Flag Instances @@ -169,13 +168,12 @@ void mVUendProgram(mV, microFlagCycles* mFC, int isEbit) { xPSHUF.D(xmmPQ, xmmPQ, 0xe1); if (isVU1) { - xPSHUF.D(xmmPQ, xmmPQ, pInst ? 0x1b : 0x4e); + if (pInst) { xPSHUF.D(xmmPQ, xmmPQ, 0xb4); } // Swap Pending/Active P + xPSHUF.D(xmmPQ, xmmPQ, 0xC6); // 3 0 1 2 xMOVSS(ptr32[&mVU.regs().VI[REG_P].UL], xmmPQ); - xPSHUF.D(xmmPQ, xmmPQ, pInst ? 0x1b : 0x4e); - - xPSHUF.D(xmmPQ, xmmPQ, 0x1b); + xPSHUF.D(xmmPQ, xmmPQ, 0x87); // 0 2 1 3 xMOVSS(ptr32[&mVU.regs().pending_p], xmmPQ); - xPSHUF.D(xmmPQ, xmmPQ, 0x1b); + xPSHUF.D(xmmPQ, xmmPQ, 0x27); // 3 2 1 0 } // Save MAC, Status and CLIP Flag Instances @@ -233,6 +231,7 @@ void mVUsetupBranch(mV, microFlagCycles& mFC) { // Shuffle P/Q regs since every block starts at instance #0 if (mVU.p || mVU.q) { xPSHUF.D(xmmPQ, xmmPQ, shufflePQ); } + mVU.p = 0, mVU.q = 0; } void normBranchCompile(microVU& mVU, u32 branchPC) { @@ -309,6 +308,7 @@ void normBranch(mV, microFlagCycles& mFC) { for (size_t i = 0; i < (sizeof(microRegInfo) - 4) / 4; i++, lpS++, cpS++) { xMOV(ptr32[lpS], cpS[0]); } + mVUsetupBranch(mVU, mFC); mVUendProgram(mVU, &mFC, 3); iPC = branchAddr(mVU) / 4; xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC);