From cb70d5ee4f7f8b2209b79546db938bdd4d4727a1 Mon Sep 17 00:00:00 2001 From: Sintendo Date: Thu, 19 Nov 2020 21:20:54 +0100 Subject: [PATCH] Jit64: srawix - Handle constant input register Much like we did for srawx. This was already implemented on JitArm64. Before: B8 00 00 00 00 mov eax,0 8B F0 mov esi,eax C1 E8 1F shr eax,1Fh 23 C6 and eax,esi D1 FE sar esi,1 88 45 58 mov byte ptr [rbp+58h],al After: C6 45 58 00 mov byte ptr [rbp+58h],0 --- Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index e7591429e1..608e588bad 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -1995,7 +1995,13 @@ void Jit64::srawix(UGeckoInstruction inst) int s = inst.RS; int amount = inst.SH; - if (amount != 0) + if (gpr.IsImm(s)) + { + s32 imm = gpr.SImm32(s); + gpr.SetImmediate32(a, imm >> amount); + FinalizeCarry(amount != 0 && imm < 0 && (u32(imm) << (32 - amount))); + } + else if (amount != 0) { RCX64Reg Ra = gpr.Bind(a, RCMode::Write); RCOpArg Rs = gpr.Use(s, RCMode::Read);