summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authordegasus <wickmarkus@web.de>2016-10-27 21:29:05 +0200
committerdegasus <wickmarkus@web.de>2016-10-31 23:40:08 +0100
commit0d78f5926fed4a00e7ee124386ed057e00a23663 (patch)
treec07c46894557b4a5a6de1d0baf54fbe13dd169bb /Source
parentf449541e65b673f3ff46fd20ec04016170bff7c4 (diff)
JitArm64: Keep carry in the host flag for all integer instructions.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/Jit.cpp2
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp2
2 files changed, 3 insertions, 1 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
index 4be9fb1a91..3aec0032ae 100644
--- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
@@ -606,6 +606,8 @@ const u8* JitArm64::DoJit(u32 em_address, PPCAnalyst::CodeBuffer* code_buf, JitB
}
JitArm64Tables::CompileInstruction(ops[i]);
+ if (!MergeAllowedNextInstructions(1) || js.op[1].opinfo->type != OPTYPE_INTEGER)
+ FlushCarry();
// If we have a register that will never be used again, flush it.
gpr.StoreRegisters(~ops[i].gprInUse);
diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
index 1dbf9c4cd3..3b667c525b 100644
--- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_Integer.cpp
@@ -74,7 +74,7 @@ void JitArm64::ComputeCarry()
return;
js.carryFlagSet = true;
- if (MergeAllowedNextInstructions(1) && js.op[1].wantsCAInFlags)
+ if (MergeAllowedNextInstructions(1) && js.op[1].opinfo->type == OPTYPE_INTEGER)
{
return;
}