From 845d7cd51f731f1eedd25f89fa41823a7f03b9f9 Mon Sep 17 00:00:00 2001 From: Sintendo Date: Mon, 25 Jan 2021 23:44:54 +0100 Subject: [PATCH] Jit64: boolX - Optimize xor for size XOR allows for a more compact representation for constants that can be represented by a signed 8-bit integer, while MOV does not. By letting MOV handle the larger constants we can occasionally save a byte. Before: 44 89 F7 mov edi,r14d 81 F7 A0 52 57 01 xor edi,15752A0h After: BF A0 52 57 01 mov edi,15752A0h 41 33 FE xor edi,r14d --- Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp index 2997748790..d32c0031b6 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_Integer.cpp @@ -699,11 +699,17 @@ void Jit64::boolX(UGeckoInstruction inst) MOV(32, Ra, Rj); NOT(32, Ra); } + else if (a == j) + XOR(32, Ra, Imm32(imm)); + else if (s32(imm) >= -128 && s32(imm) <= 127) + { + MOV(32, Ra, Rj); + XOR(32, Ra, Imm32(imm)); + } else { - if (a != j) - MOV(32, Ra, Rj); - XOR(32, Ra, Imm32(imm)); + MOV(32, Ra, Imm32(imm)); + XOR(32, Ra, Rj); } } else if (is_and)