From c9011e9d2c1a8bc8a1121d220e7a0d0b33c71e15 Mon Sep 17 00:00:00 2001 From: Sintendo Date: Mon, 25 Jan 2021 22:59:14 +0100 Subject: [PATCH] Jit64: boolX - Special case xor with 0 No computation necessary, but we may need a MOV. Before: 8B FE mov edi,esi 83 F7 00 xor edi,0 After: 8B FE mov edi,esi --- Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index 6fadcebb48..b4cb6cee39 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -687,10 +687,18 @@ void Jit64::boolX(UGeckoInstruction inst) RCOpArg Rj = gpr.Use(j, RCMode::Read); RCX64Reg Ra = gpr.Bind(a, RCMode::Write); RegCache::Realize(Rj, Ra); - - if (a != j) - MOV(32, Ra, Rj); - XOR(32, Ra, Imm32(imm)); + if (imm == 0) + { + if (a != j) + MOV(32, Ra, Rj); + needs_test = true; + } + else + { + if (a != j) + MOV(32, Ra, Rj); + XOR(32, Ra, Imm32(imm)); + } } else if (is_and) {