From 24816605192412c0eb63f24b8d0b8ba97017846d Mon Sep 17 00:00:00 2001 From: Sintendo Date: Sun, 19 Apr 2020 23:13:02 +0200 Subject: [PATCH] Jit64: addx - Emit MOV when possible When the source registers are a simple register and a constant zero and overflow isn't needed, emitting LEA is kinda silly. This will occasionally save a single byte for certain registers due to how x86 encoding works. More importantly, LEA takes up execution resources while MOV does not. Before: 41 8D 7D 00 lea edi,[r13] After: 41 8B FD mov edi,r13d --- Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index 39452e2512..a34d5bf356 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -1346,7 +1346,15 @@ void Jit64::addx(UGeckoInstruction inst) { RCOpArg& Rimm = Ra.IsImm() ? Ra : Rb; RCOpArg& Rreg = Ra.IsImm() ? Rb : Ra; - LEA(32, Rd, MDisp(Rreg.GetSimpleReg(), Rimm.SImm32())); + + if (Rimm.IsZero()) + { + MOV(32, Rd, Rreg); + } + else + { + LEA(32, Rd, MDisp(Rreg.GetSimpleReg(), Rimm.SImm32())); + } } else {