diff options
| author | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-12-28 21:53:28 +0100 |
|---|---|---|
| committer | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-12-28 21:55:57 +0100 |
| commit | d2bfa157dc9ed038ab298c92b52dc09fda782bb5 (patch) | |
| tree | fde756178c4106fd76a2e393b8fac7bb34e8e66a /Source/Core | |
| parent | ad7dba541353d532f0299f6442e8ca59a9040695 (diff) | |
JitArm64_Integer: addex - Optimize InHostCarry for 0
Similar to what we did for subfex, but for 0.
Before:
0x5280001b mov w27, #0x0 ; =0
0x1a1f037b adc w27, w27, wzr
After:
0x1a9f37fb cset w27, hs
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index eb742ac1dd..54c86ba1f1 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1495,8 +1495,16 @@ void JitArm64::addex(UGeckoInstruction inst) { gpr.BindToRegister(d, false); ARM64Reg RD = gpr.R(d); - MOVI2R(RD, imm); - ADC(RD, RD, ARM64Reg::WZR); + if (is_zero) + { + // RD = 0 + carry = carry ? 1 : 0 + CSET(RD, CC_CS); + } + else + { + MOVI2R(RD, imm); + ADC(RD, RD, ARM64Reg::WZR); + } break; } case CarryFlag::ConstantTrue: |
