summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2013-02-27 15:17:23 -0600
committerRyan Houdek <Sonicadvance1@gmail.com>2013-02-27 15:17:23 -0600
commit9ff704f202cf4d31e00476c08d27327f12478b8a (patch)
tree4b9e0ef24fad933601fe6bd0c3811b5bd0340eaf /Source/Core
parentf1d727cf1376efebf434abcaa31c63abd2894dad (diff)
Small improvement to cmpli/cmpi in ARMJit.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp
index 63c96b21fd..753568c9d3 100644
--- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp
+++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp
@@ -193,11 +193,18 @@ void JitArm::cmpi(UGeckoInstruction inst)
JITDISABLE(Integer)
ARMReg RA = gpr.R(inst.RA);
- ARMReg rA = gpr.GetReg();
int crf = inst.CRFD;
- MOVI2R(rA, inst.SIMM_16);
- CMP(RA, rA);
- gpr.Unlock(rA);
+ if (inst.SIMM_16 >= 0 && inst.SIMM_16 < 256)
+ {
+ CMP(RA, inst.SIMM_16);
+ }
+ else
+ {
+ ARMReg rA = gpr.GetReg();
+ MOVI2R(rA, inst.SIMM_16);
+ CMP(RA, rA);
+ gpr.Unlock(rA);
+ }
ComputeRC(crf);
}
void JitArm::cmpli(UGeckoInstruction inst)
@@ -208,9 +215,16 @@ void JitArm::cmpli(UGeckoInstruction inst)
ARMReg RA = gpr.R(inst.RA);
ARMReg rA = gpr.GetReg();
int crf = inst.CRFD;
- MOVI2R(rA, (u32)inst.UIMM);
- CMP(RA, rA);
-
+ u32 uimm = (u32)inst.UIMM;
+ if (uimm < 256)
+ {
+ CMP(RA, uimm);
+ }
+ else
+ {
+ MOVI2R(rA, (u32)inst.UIMM);
+ CMP(RA, rA);
+ }
// Unsigned GenerateRC()
MOV(rA, 0x2); // Result == 0