From b760a56a9abd4fdda2f2809f0ad8e7d861c7a2a8 Mon Sep 17 00:00:00 2001 From: Sintendo Date: Tue, 26 Jan 2021 22:34:03 +0100 Subject: [PATCH] Jit64: boolX - Special case and with 0xFFFFFFFF Bitwise and with all ones doesn't accomplish much. Before: 41 8B F5 mov esi,r13d 83 E6 FF and esi,0FFFFFFFFh After: 41 8B F5 mov esi,r13d --- .../Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index def501d988..7b16d335f0 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -722,7 +722,15 @@ void Jit64::boolX(UGeckoInstruction inst) RCX64Reg Ra = gpr.Bind(a, RCMode::Write); RegCache::Realize(Rj, Ra); - if (complement_b) + if (imm == 0xFFFFFFFF) + { + if (a != j) + MOV(32, Ra, Rj); + if (final_not || complement_b) + NOT(32, Ra); + needs_test = true; + } + else if (complement_b) { if (a != j) MOV(32, Ra, Rj); @@ -734,12 +742,12 @@ void Jit64::boolX(UGeckoInstruction inst) if (a != j) MOV(32, Ra, Rj); AND(32, Ra, Imm32(imm)); - } - if (final_not) - { - NOT(32, Ra); - needs_test = true; + if (final_not) + { + NOT(32, Ra); + needs_test = true; + } } } }