From 618d261b910d1e90acbfcd504bc3a2b04f457f10 Mon Sep 17 00:00:00 2001 From: Sintendo Date: Wed, 29 Jan 2020 23:17:18 +0100 Subject: [PATCH] DSPJitMultiplier: addpaxz - AND constant directly There's no need to load the 64-bit immediate into a temporary register. x64 will sign-extend 32-bit immediates to 64 bits, giving us the exact value we need in this case. 48 C7 C0 00 00 FF FF mov rax,0FFFFFFFFFFFF0000h 48 21 C2 and rdx,rax 48 81 E2 00 00 FF FF and rdx,0FFFFFFFFFFFF0000h --- Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp b/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp index 63acadc559..5e102ab25f 100644 --- a/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp +++ b/Source/Core/Core/DSP/Jit/x64/DSPJitMultiplier.cpp @@ -252,8 +252,7 @@ void DSPEmitter::addpaxz(const UDSPInstruction opc) get_long_acx(sreg, tmp1); MOV(64, R(RDX), R(tmp1)); // s64 res = prod + (ax & ~0xffff); - MOV(64, R(RAX), Imm64(~0xffff)); - AND(64, R(RDX), R(RAX)); + AND(64, R(RDX), Imm32(~0xffff)); // s64 prod = dsp_get_long_prod_round_prodl(); get_long_prod_round_prodl(); ADD(64, R(RAX), R(RDX));