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);