Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #9819 from JosJuice/jitarm64-sbc
JitArm64: Use SBC/SBCS for emulating subfex
  • Loading branch information
degasus committed Jun 17, 2021
2 parents b530d9b + fac8420 commit 503c62e
Showing 1 changed file with 7 additions and 10 deletions.
17 changes: 7 additions & 10 deletions Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
Expand Up @@ -994,26 +994,22 @@ void JitArm64::subfex(UGeckoInstruction inst)
}
else
{
ARM64Reg WA = js.carryFlag != CarryFlag::ConstantTrue ? gpr.GetReg() : ARM64Reg::INVALID_REG;
gpr.BindToRegister(d, d == a || d == b);

switch (js.carryFlag)
{
case CarryFlag::InPPCState:
{
// upload the carry state
ARM64Reg WA = gpr.GetReg();
LDRB(IndexType::Unsigned, WA, PPC_REG, PPCSTATE_OFF(xer_ca));
CMP(WA, 1);
gpr.Unlock(WA);
[[fallthrough]];
}
case CarryFlag::InHostCarry:
{
if (gpr.IsImm(a))
MOVI2R(WA, u32(~gpr.GetImm(a)));
else
MVN(WA, gpr.R(a));

CARRY_IF_NEEDED(ADC, ADCS, gpr.R(d), WA, gpr.R(b));
CARRY_IF_NEEDED(SBC, SBCS, gpr.R(d), gpr.R(b), gpr.R(a));
ComputeCarry();
break;
}
Expand All @@ -1025,19 +1021,20 @@ void JitArm64::subfex(UGeckoInstruction inst)
}
case CarryFlag::ConstantFalse:
{
ARM64Reg WA = gpr.GetReg();

if (gpr.IsImm(a))
MOVI2R(WA, u32(~gpr.GetImm(a)));
else
MVN(WA, gpr.R(a));

CARRY_IF_NEEDED(ADD, ADDS, gpr.R(d), WA, gpr.R(b));

gpr.Unlock(WA);
ComputeCarry();
break;
}
}

if (WA != ARM64Reg::INVALID_REG)
gpr.Unlock(WA);
}

if (inst.Rc)
Expand Down

0 comments on commit 503c62e

Please sign in to comment.