summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2014-09-23 18:00:41 +1000
committerskidau <skidau@gmail.com>2014-09-23 18:00:41 +1000
commit65eb0ff2fed7f06505dae46dc584716c873b0691 (patch)
tree659938e1debba19fa4f8f28fb8098f996ebe8cc2
parentcbf102794eee35e385cf45f55458254ad802e6c2 (diff)
Replaced KillImmediate with BindToRegister in the tw instruction. Fixes the error "WriteNormalOp - a1 and a2 cannot both be memory" which appeared on starting Monopoly Streets.
-rw-r--r--Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp
index 8bfcd08762..10efad48c5 100644
--- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp
+++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp
@@ -1883,12 +1883,16 @@ void Jit64::twx(UGeckoInstruction inst)
s32 a = inst.RA;
- gpr.KillImmediate(a, true, false);
-
if (inst.OPCD == 3) // twi
+ {
+ gpr.KillImmediate(a, true, false);
CMP(32, gpr.R(a), Imm32((s32)(s16)inst.SIMM_16));
+ }
else // tw
+ {
+ gpr.BindToRegister(a, true, false);
CMP(32, gpr.R(a), gpr.R(inst.RB));
+ }
std::vector<FixupBranch> fixups;
CCFlags conditions[] = { CC_A, CC_B, CC_E, CC_G, CC_L };