From 9f0a7c987522d89ffa503ed04a00205fb10d035d Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sat, 23 Mar 2024 14:30:00 +0100 Subject: [PATCH] JitArm64: Skip SXTW in ComputeRC0(u64) MOVI2R can set the upper bits to ones for free by using MOVN instead of MOVZ. --- Source/Core/Core/PowerPC/JitArm64/Jit.h | 2 +- Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.h b/Source/Core/Core/PowerPC/JitArm64/Jit.h index ad9c7e4672f2..6d0ded667a5f 100644 --- a/Source/Core/Core/PowerPC/JitArm64/Jit.h +++ b/Source/Core/Core/PowerPC/JitArm64/Jit.h @@ -351,7 +351,7 @@ class JitArm64 : public JitBase, public Arm64Gen::ARM64CodeBlock, public CommonA void UpdateRoundingMode(); void ComputeRC0(Arm64Gen::ARM64Reg reg); - void ComputeRC0(u64 imm); + void ComputeRC0(u32 imm); void ComputeCarry(Arm64Gen::ARM64Reg reg); // reg must contain 0 or 1 void ComputeCarry(bool carry); void ComputeCarry(); diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 43c90c98270b..0c002bac66c9 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -37,12 +37,10 @@ void JitArm64::ComputeRC0(ARM64Reg reg) SXTW(gpr.CR(0), reg); } -void JitArm64::ComputeRC0(u64 imm) +void JitArm64::ComputeRC0(u32 imm) { gpr.BindCRToRegister(0, false); - MOVI2R(gpr.CR(0), imm); - if (imm & 0x80000000) - SXTW(gpr.CR(0), EncodeRegTo32(gpr.CR(0))); + MOVI2R(gpr.CR(0), s64(s32(imm))); } void JitArm64::ComputeCarry(ARM64Reg reg)