diff options
| author | Markus Wick <degasus@users.noreply.github.com> | 2020-12-08 00:14:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-08 00:14:32 +0100 |
| commit | 1827a0738bff0fca89e8704b341acdd0c86467d4 (patch) | |
| tree | e941ea70ebaf85aaa9a858af492c18e53b4b00a5 /Source | |
| parent | 2952f99f691e69e450c5ac52dca9516483ade2ee (diff) | |
| parent | 0cebbb590ecca1ef6d8b8b42c7e59c7759ec6937 (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.cpp | 14 | ||||
| -rw-r--r-- | Source/Core/Core/PowerPC/PowerPC.cpp | 4 |
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 } } } |
