From 854979937c86f5499650a0733c4a0188a0c50c37 Mon Sep 17 00:00:00 2001 From: Sintendo <3380580+Sintendo@users.noreply.github.com> Date: Wed, 30 Jul 2025 21:29:01 +0200 Subject: [PATCH] JitArm64_Integer: subfex - Improve codegen for zero with InHostCarry Another instance where we needlessly materialized constant zero in a register. We can just write the carry flag directly. Before: 0x5280001a mov w26, #0x0 ; =0 0x1a1f035a adc w26, w26, wzr After: 0x1a9f37fa cset w26, hs --- Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index df2b48631d..78a8d579da 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -1339,7 +1339,12 @@ void JitArm64::subfex(UGeckoInstruction inst) { gpr.BindToRegister(d, false); ARM64Reg RD = gpr.R(d); - if (is_all_ones) + if (is_zero) + { + // RD = 0 + carry + CSET(RD, CC_CS); + } + else if (is_all_ones) { // RD = -1 + carry = carry ? 0 : -1 // CSETM sets the destination to -1 if the condition is true, 0