diff --git a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp index 40a3fd9fbf..7056441856 100644 --- a/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp +++ b/Source/Core/Core/Src/PowerPC/JitArm32/JitArm_SystemRegisters.cpp @@ -110,6 +110,7 @@ void JitArm::mtcrf(UGeckoInstruction inst) { INSTRUCTION_START JITDISABLE(bJITSystemRegistersOff) + ARMReg rA = gpr.GetReg(); // USES_CR @@ -130,16 +131,17 @@ void JitArm::mtcrf(UGeckoInstruction inst) } else { + ARMReg rB = gpr.GetReg(); + MOV(rA, gpr.R(inst.RS)); for (int i = 0; i < 8; i++) { if ((crm & (0x80 >> i)) != 0) { - MOV(rA, gpr.R(inst.RS)); - LSR(rA, rA, 28 - (i * 4)); - AND(rA, rA, 0xF); - STRB(rA, R9, PPCSTATE_OFF(cr_fast[i])); + UBFX(rB, rA, 28 - (i * 4), 4); + STRB(rB, R9, PPCSTATE_OFF(cr_fast[i])); } } + gpr.Unlock(rB); } } gpr.Unlock(rA);