summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
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: