diff options
| author | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2025-08-06 00:30:31 +0200 |
|---|---|---|
| committer | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2025-08-07 07:51:15 +0200 |
| commit | fc9f2d9cea4fc0e92e16edbe075780d68c591cc7 (patch) | |
| tree | fdf069dccaaa9f18a91a18f1639d543bb369a43e /Source | |
| parent | e3d889feb17782804061233f01bbf7ae691b4fac (diff) | |
JitArm64_Integer: subfcx - Optimize b == 0
Equivalent to a negation, no need to materialize the zero.
Before:
0x52800015 mov w21, #0x0 ; =0
0x6b1802b6 subs w22, w21, w24
After:
0x6b1803f6 negs w22, w24
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 31b8f96f71..25a4ada478 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1443,6 +1443,14 @@ void JitArm64::subfcx(UGeckoInstruction inst) if (inst.Rc) ComputeRC0(gpr.R(d)); } + else if (gpr.IsImm(b, 0)) + { + gpr.BindToRegister(d, d == a); + CARRY_IF_NEEDED(NEG, NEGS, gpr.R(d), gpr.R(a)); + ComputeCarry(); + if (inst.Rc) + ComputeRC0(gpr.R(d)); + } else { gpr.BindToRegister(d, d == a || d == b); |
