[ARM] Disables loadstores with update because they are broken.

This commit is contained in:
Ryan Houdek 2013-09-12 09:40:10 +00:00
parent 2c33bab1a6
commit e1d510c2dc
1 changed files with 10 additions and 1 deletions

View File

@ -318,6 +318,7 @@ void JitArm::lXX(UGeckoInstruction inst)
{ {
INSTRUCTION_START INSTRUCTION_START
JITDISABLE(bJITLoadStoreOff) JITDISABLE(bJITLoadStoreOff)
u32 a = inst.RA, b = inst.RB, d = inst.RD; u32 a = inst.RA, b = inst.RB, d = inst.RD;
s32 offset = inst.SIMM_16; s32 offset = inst.SIMM_16;
u32 accessSize = 0; u32 accessSize = 0;
@ -401,9 +402,16 @@ void JitArm::lXX(UGeckoInstruction inst)
accessSize = 16; accessSize = 16;
break; break;
} }
if (update)
{
Default(inst);
return;
}
// Check for exception before loading // Check for exception before loading
ARMReg rA = gpr.GetReg(false); ARMReg rA = gpr.GetReg(false);
LDR(rA, R9, PPCSTATE_OFF(Exceptions)); LDR(rA, R9, PPCSTATE_OFF(Exceptions));
CMP(rA, EXCEPTION_DSI); CMP(rA, EXCEPTION_DSI);
FixupBranch DoNotLoad = B_CC(CC_EQ); FixupBranch DoNotLoad = B_CC(CC_EQ);
@ -422,9 +430,10 @@ void JitArm::lXX(UGeckoInstruction inst)
} }
SetJumpTarget(DoNotLoad); SetJumpTarget(DoNotLoad);
// LWZ idle skipping // LWZ idle skipping
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle && if (SConfig::GetInstance().m_LocalCoreStartupParameter.bSkipIdle &&
inst.OPCD == 32 &&
(inst.hex & 0xFFFF0000) == 0x800D0000 && (inst.hex & 0xFFFF0000) == 0x800D0000 &&
(Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x28000000 || (Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x28000000 ||
(SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x2C000000)) && (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii && Memory::ReadUnchecked_U32(js.compilerPC + 4) == 0x2C000000)) &&