summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2022-10-02 01:10:48 +0200
committerGitHub <noreply@github.com>2022-10-02 01:10:48 +0200
commitc84835c53cdad30faa55fc79cd52993d88eceb9a (patch)
tree4d0ee94ec85721937e954fcda9e41428287f1dbd /Source/Core
parent6911e1b7300d377869df43cb1f22de442fcd607a (diff)
parent8984777749b6053da703b5e219fe9a8f0e577fd2 (diff)
Merge pull request #11114 from JosJuice/jitarm64-divwx-imm
JitArm64: Fix divwx BindToRegister condition
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
index fd13d0ec79..2fc1524809 100644
--- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
@@ -476,9 +476,11 @@ void JitArm64::addx(UGeckoInstruction inst)
{
int imm_reg = gpr.IsImm(a) ? a : b;
int in_reg = gpr.IsImm(a) ? b : a;
+ int imm_value = gpr.GetImm(imm_reg);
+
gpr.BindToRegister(d, d == in_reg);
ARM64Reg WA = gpr.GetReg();
- ADDI2R(gpr.R(d), gpr.R(in_reg), gpr.GetImm(imm_reg), WA);
+ ADDI2R(gpr.R(d), gpr.R(in_reg), imm_value, WA);
gpr.Unlock(WA);
if (inst.Rc)
ComputeRC0(gpr.R(d));
@@ -745,11 +747,11 @@ void JitArm64::rlwnmx(UGeckoInstruction inst)
}
else if (gpr.IsImm(b))
{
+ int imm_value = gpr.GetImm(b) & 0x1f;
gpr.BindToRegister(a, a == s);
ARM64Reg WA = gpr.GetReg();
- ArithOption Shift(gpr.R(s), ShiftType::ROR, 32 - (gpr.GetImm(b) & 0x1f));
MOVI2R(WA, mask);
- AND(gpr.R(a), WA, gpr.R(s), Shift);
+ AND(gpr.R(a), WA, gpr.R(s), ArithOption(gpr.R(s), ShiftType::ROR, 32 - imm_value));
gpr.Unlock(WA);
if (inst.Rc)
ComputeRC0(gpr.R(a));
@@ -1433,7 +1435,7 @@ void JitArm64::divwx(UGeckoInstruction inst)
{
const u32 dividend = gpr.GetImm(a);
- gpr.BindToRegister(d, d == b);
+ gpr.BindToRegister(d, d == a || d == b);
ARM64Reg RB = gpr.R(b);
ARM64Reg RD = gpr.R(d);