diff options
| author | Ryan Houdek <Sonicadvance1@Gmail.com> | 2013-09-14 04:29:37 +0000 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@Gmail.com> | 2013-09-14 04:29:37 +0000 |
| commit | 6fe86f1fd1fedf55ba58d52bd2e7252717334de7 (patch) | |
| tree | c7d3b850493b4693d2713024fd4cd56a678919b0 /Source/Core | |
| parent | ef2ea31eacefcaa02aeda653f3ff3da4fa7e46e4 (diff) | |
[ARM] cntlzwx implementation.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/JitArm32/Jit.h | 1 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp | 16 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp | 2 |
3 files changed, 18 insertions, 1 deletions
diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h index 143f21b5ee..cb2dbbd508 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h +++ b/Source/Core/Core/Src/PowerPC/JitArm32/Jit.h @@ -157,6 +157,7 @@ public: void arith(UGeckoInstruction _inst); void addex(UGeckoInstruction _inst); + void cntlzwx(UGeckoInstruction _inst); void cmp (UGeckoInstruction _inst); void cmpi(UGeckoInstruction _inst); void cmpl(UGeckoInstruction _inst); diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp index 9873c0d479..67004ecfb5 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Integer.cpp @@ -529,6 +529,22 @@ void JitArm::addex(UGeckoInstruction inst) gpr.Unlock(rA); } +void JitArm::cntlzwx(UGeckoInstruction inst) +{ + INSTRUCTION_START + JITDISABLE(bJITIntegerOff) + u32 a = inst.RA, s = inst.RS; + + ARMReg RA = gpr.R(a); + ARMReg RS = gpr.R(s); + CLZ(RA, RS); + if (inst.Rc) + { + CMP(RA, 0); + ComputeRC(); + } +} + void JitArm::mulhwux(UGeckoInstruction inst) { INSTRUCTION_START diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp index 4569eb54c4..9728bc270c 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_Tables.cpp @@ -204,7 +204,7 @@ static GekkoOPTemplate table31[] = {284, &JitArm::arith}, //"eqvx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_SB | FL_RC_BIT}}, {0, &JitArm::cmp}, //"cmp", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, {32, &JitArm::cmpl}, //"cmpl", OPTYPE_INTEGER, FL_IN_AB | FL_SET_CRn}}, - {26, &JitArm::Default}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, + {26, &JitArm::cntlzwx}, //"cntlzwx",OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, {922, &JitArm::extshx}, //"extshx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, {954, &JitArm::extsbx}, //"extsbx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_S | FL_RC_BIT}}, {536, &JitArm::Default}, //"srwx", OPTYPE_INTEGER, FL_OUT_A | FL_IN_B | FL_IN_S | FL_RC_BIT}}, |
