diff options
| author | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-12-28 23:26:55 +0100 |
|---|---|---|
| committer | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-12-29 12:21:34 +0100 |
| commit | d81bfe94ebda073938fb71b148dd7d613719fca0 (patch) | |
| tree | 92df0a2cd583336902d809f7a6fc9fb96aa3d1bd /Source/Core | |
| parent | c817b4779daf6b58a25bfb194a156e3215177574 (diff) | |
JitArm64_Integer: addzex - Optimize InHostCarry case for 0
Before:
0x5280000d mov w13, #0x0 ; =0
0x1a1f01ae adc w14, w13, wzr
After:
0x1a9f37ee cset w14, hs
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp index 0b21cc2d9d..4d92714fd9 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp @@ -10,7 +10,6 @@ #include "Common/BitUtils.h" #include "Common/CommonTypes.h" #include "Common/MathUtil.h" -#include "Common/Unreachable.h" #include "Core/Core.h" #include "Core/CoreTiming.h" @@ -1129,8 +1128,7 @@ void JitArm64::addzex(UGeckoInstruction inst) int a = inst.RA, d = inst.RD; - if (gpr.IsImm(a) && - (HasConstantCarry() || (js.carryFlag == CarryFlag::InPPCState && gpr.GetImm(a) == 0))) + if (gpr.IsImm(a) && (gpr.GetImm(a) == 0 || HasConstantCarry())) { const u32 imm = gpr.GetImm(a); const bool is_all_ones = imm == 0xFFFFFFFF; @@ -1144,6 +1142,13 @@ void JitArm64::addzex(UGeckoInstruction inst) ComputeCarry(false); break; } + case CarryFlag::InHostCarry: + { + gpr.BindToRegister(d, false); + CSET(gpr.R(d), CCFlags::CC_CS); + ComputeCarry(false); + break; + } case CarryFlag::ConstantTrue: { gpr.SetImmediate(d, imm + 1); @@ -1156,8 +1161,6 @@ void JitArm64::addzex(UGeckoInstruction inst) ComputeCarry(false); break; } - default: - Common::Unreachable(); } } else |
