summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2014-10-23 15:19:51 +0000
committerRyan Houdek <Sonicadvance1@gmail.com>2014-10-23 15:39:09 +0000
commit6743d6ef1f7125a89944ffa982ee059fa0edbed3 (patch)
tree0fa7fff833c6e58a4f4b954ea7fe45b6a463b690 /Source/Core
parent0253c35d3ae706403904464cd057a976c1436d43 (diff)
Adds support back for non-immediate cmp/cmpi to ARMv7 JIT.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp b/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp
index 6b7479e4ca..de78e8f6d6 100644
--- a/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp
+++ b/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp
@@ -772,7 +772,14 @@ void JitArm::cmp (UGeckoInstruction inst)
return;
}
- FALLBACK_IF(true);
+ ARMReg rA = gpr.GetReg();
+ ARMReg RA = gpr.R(a);
+ ARMReg RB = gpr.R(b);
+
+ SUB(rA, RA, RB);
+ ComputeRC(rA, crf);
+
+ gpr.Unlock(rA);
}
void JitArm::cmpi(UGeckoInstruction inst)
{
@@ -785,8 +792,21 @@ void JitArm::cmpi(UGeckoInstruction inst)
ComputeRC((s32)gpr.GetImm(a) - inst.SIMM_16, crf);
return;
}
+ ARMReg rA = gpr.GetReg();
+ ARMReg RA = gpr.R(a);
- FALLBACK_IF(true);
+ if (inst.SIMM_16 >= 0 && inst.SIMM_16 < 256)
+ {
+ SUB(rA, RA, inst.SIMM_16);
+ }
+ else
+ {
+ MOVI2R(rA, inst.SIMM_16);
+ SUB(rA, RA, rA);
+ }
+ ComputeRC(rA, crf);
+
+ gpr.Unlock(rA);
}
void JitArm::negx(UGeckoInstruction inst)