summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorSintendo <3380580+Sintendo@users.noreply.github.com>2024-12-28 21:53:28 +0100
committerSintendo <3380580+Sintendo@users.noreply.github.com>2024-12-28 21:55:57 +0100
commitd2bfa157dc9ed038ab298c92b52dc09fda782bb5 (patch)
treefde756178c4106fd76a2e393b8fac7bb34e8e66a /Source/Core
parentad7dba541353d532f0299f6442e8ca59a9040695 (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.cpp12
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: