summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorMarkus Wick <degasus@users.noreply.github.com>2020-12-08 00:14:32 +0100
committerGitHub <noreply@github.com>2020-12-08 00:14:32 +0100
commit1827a0738bff0fca89e8704b341acdd0c86467d4 (patch)
treee941ea70ebaf85aaa9a858af492c18e53b4b00a5 /Source
parent2952f99f691e69e450c5ac52dca9516483ade2ee (diff)
parent0cebbb590ecca1ef6d8b8b42c7e59c7759ec6937 (diff)
Merge pull request #9299 from JosJuice/jitarm64-downcount
JitArm64: Do downcount immediately before jumping to dispatcher
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/PowerPC/JitArm64/Jit.cpp14
-rw-r--r--Source/Core/Core/PowerPC/PowerPC.cpp4
2 files changed, 7 insertions, 11 deletions
diff --git a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
index e273ccfe89..7cfd91d3e7 100644
--- a/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
+++ b/Source/Core/Core/PowerPC/JitArm64/Jit.cpp
@@ -299,8 +299,8 @@ void JitArm64::FreeStack()
void JitArm64::WriteExit(u32 destination, bool LK, u32 exit_address_after_return)
{
Cleanup();
- DoDownCount();
EndTimeProfile(js.curBlock);
+ DoDownCount();
LK &= m_enable_blr_optimization;
@@ -341,8 +341,8 @@ void JitArm64::WriteExit(Arm64Gen::ARM64Reg dest, bool LK, u32 exit_address_afte
MOV(DISPATCHER_PC, dest);
Cleanup();
- DoDownCount();
EndTimeProfile(js.curBlock);
+ DoDownCount();
LK &= m_enable_blr_optimization;
@@ -427,17 +427,16 @@ void JitArm64::WriteBLRExit(Arm64Gen::ARM64Reg dest)
SetJumpTarget(no_match);
- DoDownCount();
-
ResetStack();
+ DoDownCount();
+
B(dispatcher);
}
void JitArm64::WriteExceptionExit(u32 destination, bool only_external)
{
Cleanup();
- DoDownCount();
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
MOVI2R(DISPATCHER_PC, destination);
@@ -455,6 +454,7 @@ void JitArm64::WriteExceptionExit(u32 destination, bool only_external)
SetJumpTarget(no_exceptions);
EndTimeProfile(js.curBlock);
+ DoDownCount();
B(dispatcher);
}
@@ -465,7 +465,6 @@ void JitArm64::WriteExceptionExit(ARM64Reg dest, bool only_external)
MOV(DISPATCHER_PC, dest);
Cleanup();
- DoDownCount();
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
FixupBranch no_exceptions = CBZ(W30);
@@ -482,6 +481,7 @@ void JitArm64::WriteExceptionExit(ARM64Reg dest, bool only_external)
SetJumpTarget(no_exceptions);
EndTimeProfile(js.curBlock);
+ DoDownCount();
B(dispatcher);
}
@@ -658,7 +658,7 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
MOVI2R(W0, static_cast<u32>(JitInterface::ExceptionType::PairedQuantize));
MOVP2R(X1, &JitInterface::CompileExceptionCheck);
BLR(X1);
- B(dispatcher);
+ B(dispatcher_no_check);
SwitchToNearCode();
SetJumpTarget(no_fail);
js.assumeNoPairedQuantize = true;
diff --git a/Source/Core/Core/PowerPC/PowerPC.cpp b/Source/Core/Core/PowerPC/PowerPC.cpp
index 13200e0d6a..6a20d6a345 100644
--- a/Source/Core/Core/PowerPC/PowerPC.cpp
+++ b/Source/Core/Core/PowerPC/PowerPC.cpp
@@ -594,12 +594,8 @@ void CheckExternalExceptions()
else
{
DEBUG_ASSERT_MSG(POWERPC, 0, "Unknown EXT interrupt: Exceptions == %08x", exceptions);
-
- // TODO: Re-enable this on ARM64 after fixing https://bugs.dolphin-emu.org/issues/12327
-#ifndef _M_ARM_64
ERROR_LOG_FMT(POWERPC, "Unknown EXTERNAL INTERRUPT exception: Exceptions == {:08x}",
exceptions);
-#endif
}
}
}