From f7a52c0c356940d5bc0c5ba3aafe830cb7cc2856 Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 20 Mar 2017 09:25:49 +0100 Subject: [PATCH] JitArm64: Fix gpr.GetReg usages in conditional code. --- Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp | 3 ++- Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp index 38e393e08b..82325b0f49 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Branch.cpp @@ -231,6 +231,8 @@ void JitArm64::bclrx(UGeckoInstruction inst) (inst.BO & BO_DONT_DECREMENT_FLAG) == 0 || (inst.BO & BO_DONT_CHECK_CONDITION) == 0; ARM64Reg WA = gpr.GetReg(); + ARM64Reg WB = inst.LK ? gpr.GetReg() : INVALID_REG; + FixupBranch pCTRDontBranch; if ((inst.BO & BO_DONT_DECREMENT_FLAG) == 0) // Decrement and test CTR { @@ -263,7 +265,6 @@ void JitArm64::bclrx(UGeckoInstruction inst) if (inst.LK) { - ARM64Reg WB = gpr.GetReg(); MOVI2R(WB, js.compilerPC + 4); STR(INDEX_UNSIGNED, WB, PPC_REG, PPCSTATE_OFF(spr[SPR_LR])); gpr.Unlock(WB); diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp index c1ee88395f..61c11dd8c9 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp @@ -380,6 +380,9 @@ void JitArm64::lXX(UGeckoInstruction inst) (SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) && // cmpXwi r0,0 js.op[2].inst.hex == 0x4182fff8) // beq -8 { + ARM64Reg WA = gpr.GetReg(); + ARM64Reg XA = EncodeRegTo64(WA); + // if it's still 0, we can wait until the next event FixupBranch noIdle = CBNZ(gpr.R(d)); @@ -390,8 +393,6 @@ void JitArm64::lXX(UGeckoInstruction inst) gpr.Flush(FLUSH_MAINTAIN_STATE); fpr.Flush(FLUSH_MAINTAIN_STATE); - ARM64Reg WA = gpr.GetReg(); - ARM64Reg XA = EncodeRegTo64(WA); MOVP2R(XA, &CoreTiming::Idle); BLR(XA); gpr.Unlock(WA);