From 67791d227c5c1b9665fdebca22dc24f6f3a5e670 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Fri, 1 Dec 2023 21:26:22 +0100 Subject: [PATCH] JitArm64: Add special zero case to ADDI2R This normally doesn't reduce the instruction count, but is nonetheless useful on CPUs that can do 0-cycle moves. --- Source/Core/Common/Arm64Emitter.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Arm64Emitter.cpp b/Source/Core/Common/Arm64Emitter.cpp index da78a20acf..81bb56ba62 100644 --- a/Source/Core/Common/Arm64Emitter.cpp +++ b/Source/Core/Common/Arm64Emitter.cpp @@ -4125,6 +4125,8 @@ 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) { + DEBUG_ASSERT(Is64Bit(Rd) == Is64Bit(Rn)); + if (!Is64Bit(Rd)) imm &= 0xFFFFFFFFULL; @@ -4132,7 +4134,15 @@ void ARM64XEmitter::ADDI2R_internal(ARM64Reg Rd, ARM64Reg Rn, u64 imm, bool nega u64 imm_neg = Is64Bit(Rd) ? u64(-s64(imm)) : u64(-s64(imm)) & 0xFFFFFFFFuLL; bool neg_neg = negative ? false : true; - // Fast paths, aarch64 immediate instructions + // Special path for zeroes + if (imm == 0 && !flags) + { + if (Rd != Rn) + MOV(Rd, Rn); + return; + } + + // Regular fast paths, aarch64 immediate instructions // Try them all first if (imm <= 0xFFF) {