JitArm64: Skip SXTW in ComputeRC0(u64)

MOVI2R can set the upper bits to ones for free by using MOVN instead of
MOVZ.
This commit is contained in:
JosJuice 2024-03-23 14:30:00 +01:00
parent 3948ac9513
commit 9f0a7c9875
2 changed files with 3 additions and 5 deletions

View File

@ -351,7 +351,7 @@ protected:
void UpdateRoundingMode(); void UpdateRoundingMode();
void ComputeRC0(Arm64Gen::ARM64Reg reg); 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(Arm64Gen::ARM64Reg reg); // reg must contain 0 or 1
void ComputeCarry(bool carry); void ComputeCarry(bool carry);
void ComputeCarry(); void ComputeCarry();

View File

@ -37,12 +37,10 @@ void JitArm64::ComputeRC0(ARM64Reg reg)
SXTW(gpr.CR(0), reg); SXTW(gpr.CR(0), reg);
} }
void JitArm64::ComputeRC0(u64 imm) void JitArm64::ComputeRC0(u32 imm)
{ {
gpr.BindCRToRegister(0, false); gpr.BindCRToRegister(0, false);
MOVI2R(gpr.CR(0), imm); MOVI2R(gpr.CR(0), s64(s32(imm)));
if (imm & 0x80000000)
SXTW(gpr.CR(0), EncodeRegTo32(gpr.CR(0)));
} }
void JitArm64::ComputeCarry(ARM64Reg reg) void JitArm64::ComputeCarry(ARM64Reg reg)