diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 7d0e797340..6cd902d0c9 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -944,11 +944,16 @@ void JitArm64::mulli(UGeckoInstruction inst) } else { - gpr.BindToRegister(d, d == a); - ARM64Reg WA = gpr.GetReg(); + const bool allocate_reg = d == a; + gpr.BindToRegister(d, allocate_reg); + + // Reuse d to hold the immediate if possible, allocate a register otherwise. + ARM64Reg WA = allocate_reg ? gpr.GetReg() : gpr.R(d); + MOVI2R(WA, (u32)(s32)inst.SIMM_16); MUL(gpr.R(d), gpr.R(a), WA); - gpr.Unlock(WA); + if (allocate_reg) + gpr.Unlock(WA); } }