From 25ffb0dbfce872fad6248d5664f823e43d8531d2 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Fri, 1 Dec 2023 21:18:37 +0100 Subject: [PATCH] JitArm64: Mask input to 32-bit ADDI2R In case the input was a s32 that got sign extended as part of conversion to u64. --- Source/Core/Common/Arm64Emitter.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Source/Core/Common/Arm64Emitter.cpp b/Source/Core/Common/Arm64Emitter.cpp index 93a05fc144..da78a20acf 100644 --- a/Source/Core/Common/Arm64Emitter.cpp +++ b/Source/Core/Common/Arm64Emitter.cpp @@ -4125,6 +4125,9 @@ void ARM64XEmitter::AddImmediate(ARM64Reg Rd, ARM64Reg Rn, u64 imm, bool shift, void ARM64XEmitter::ADDI2R_internal(ARM64Reg Rd, ARM64Reg Rn, u64 imm, bool negative, bool flags, ARM64Reg scratch) { + if (!Is64Bit(Rd)) + imm &= 0xFFFFFFFFULL; + bool has_scratch = scratch != ARM64Reg::INVALID_REG; u64 imm_neg = Is64Bit(Rd) ? u64(-s64(imm)) : u64(-s64(imm)) & 0xFFFFFFFFuLL; bool neg_neg = negative ? false : true;