diff options
| author | JosJuice <josjuice@gmail.com> | 2026-07-05 17:29:57 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-05 17:29:57 +0200 |
| commit | 146f2be4369beadfa3e523eafc3046a4fba40873 (patch) | |
| tree | 5e2eac537da777246a344da04ee0f4f375b4ed4c | |
| parent | 60c76068128f1b77910cf0e04c69e0c2c1bbab70 (diff) | |
| parent | 21c26052989f6f8c29c6670c40f35df84638d12b (diff) | |
Merge pull request #14516 from Sintendo/jitarm64-subfzex
JitArm64: Minor subfzex optimizations
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index e82db40756..d60a499594 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1326,6 +1326,22 @@ void JitArm64::subfzex(UGeckoInstruction inst) gpr.SetImmediate(d, imm + carry); ComputeCarry(Interpreter::Helper_Carry(imm, carry)); } + else if (gpr.IsImm(a, 0) && js.carryFlag == CarryFlag::InHostCarry) + { + gpr.BindToRegister(d, false); + // RD = ~0 + carry = -1 + carry = carry ? 0 : -1 + // Note that CSETM sets the destination to -1 if the condition is true, + // and 0 otherwise. Hence, the condition must be carry clear. + CSETM(gpr.R(d), CC_CC); + // Carry remains unchanged. + } + else if (gpr.IsImm(a, 0xFFFFFFFF) && js.carryFlag == CarryFlag::InHostCarry) + { + gpr.BindToRegister(d, false); + // RD = ~(-1) + carry = 0 + carry = carry ? 1 : 0 + CSET(gpr.R(d), CC_CS); + ComputeCarry(false); + } else { gpr.BindToRegister(d, d == a); |
