From 1dbb39f791e089d67c2e4464f1b563c0eb889fd6 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sat, 29 Nov 2014 03:55:53 +0000 Subject: [PATCH] [ARM32] srawix optimization when source is an immediate. --- .../Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp b/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp index 5e939edb22..a7379ca20b 100644 --- a/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm32/JitArm_Integer.cpp @@ -1025,9 +1025,19 @@ void JitArm::srawix(UGeckoInstruction inst) int s = inst.RS; int amount = inst.SH; - gpr.BindToRegister(a, a == s); - if (amount != 0) + if (gpr.IsImm(s)) { + s32 imm = (s32)gpr.GetImm(s); + gpr.SetImmediate(a, imm >> amount); + + if (amount != 0 && (imm < 0) && (imm << (32 - amount))) + ComputeCarry(true); + else + ComputeCarry(false); + } + else if (amount != 0) + { + gpr.BindToRegister(a, a == s); ARMReg RA = gpr.R(a); ARMReg RS = gpr.R(s); ARMReg tmp = gpr.GetReg(); @@ -1049,6 +1059,7 @@ void JitArm::srawix(UGeckoInstruction inst) } else { + gpr.BindToRegister(a, a == s); ARMReg RA = gpr.R(a); ARMReg RS = gpr.R(s); MOV(RA, RS);