microVU: Reverted original Xtreme G Racing 3 change as that was a hack, found the real problem. Evil jumps on E-bits, could it get any worse????

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5604 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction@gmail.com 2013-03-30 23:50:22 +00:00
parent 9cc306c74f
commit 75284c9b76
2 changed files with 10 additions and 1 deletions

View File

@ -172,6 +172,15 @@ void normJumpCompile(mV, microFlagCycles& mFC, bool isEvilJump) {
if (doJumpCaching) xMOV(gprT3, (uptr)mVUpBlock);
else xMOV(gprT3, (uptr)&mVUpBlock->pStateEnd);
if(mVUup.eBit && isEvilJump)// E-bit EvilJump
{
//Xtreme G 3 does 2 conditional jumps, the first contains an E Bit on the first instruction
//So if it is taken, you need to end the program, else you get infinite loops.
mVUendProgram(mVU, &mFC, 2);
xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], gprT2);
xJMP(mVU.exitFunct);
}
if (!mVU.index) xCALL(mVUcompileJIT<0>); //(u32 startPC, uptr pState)
else xCALL(mVUcompileJIT<1>);

View File

@ -1245,7 +1245,7 @@ void setBranchA(mP, int x, int _x_) {
void condEvilBranch(mV, int JMPcc) {
if (mVUlow.badBranch) {
xMOV(ptr32[&mVU.branch], gprT1);
xMOV(ptr32[&mVU.badBranch], branchAddr);
xMOV(ptr32[&mVU.badBranch], branchAddrN);
xCMP(gprT1b, 0);
xForwardJump8 cJMP((JccComparisonType)JMPcc);