summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorSintendo <3380580+Sintendo@users.noreply.github.com>2024-12-28 23:26:55 +0100
committerSintendo <3380580+Sintendo@users.noreply.github.com>2024-12-29 12:21:34 +0100
commitd81bfe94ebda073938fb71b148dd7d613719fca0 (patch)
tree92df0a2cd583336902d809f7a6fc9fb96aa3d1bd /Source/Core
parentc817b4779daf6b58a25bfb194a156e3215177574 (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.cpp13
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