mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-19 02:36:27 +01:00
Merge pull request #9299 from JosJuice/jitarm64-downcount
JitArm64: Do downcount immediately before jumping to dispatcher
This commit is contained in:
commit
1827a0738b
@ -299,8 +299,8 @@ void JitArm64::FreeStack()
|
|||||||
void JitArm64::WriteExit(u32 destination, bool LK, u32 exit_address_after_return)
|
void JitArm64::WriteExit(u32 destination, bool LK, u32 exit_address_after_return)
|
||||||
{
|
{
|
||||||
Cleanup();
|
Cleanup();
|
||||||
DoDownCount();
|
|
||||||
EndTimeProfile(js.curBlock);
|
EndTimeProfile(js.curBlock);
|
||||||
|
DoDownCount();
|
||||||
|
|
||||||
LK &= m_enable_blr_optimization;
|
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);
|
MOV(DISPATCHER_PC, dest);
|
||||||
|
|
||||||
Cleanup();
|
Cleanup();
|
||||||
DoDownCount();
|
|
||||||
EndTimeProfile(js.curBlock);
|
EndTimeProfile(js.curBlock);
|
||||||
|
DoDownCount();
|
||||||
|
|
||||||
LK &= m_enable_blr_optimization;
|
LK &= m_enable_blr_optimization;
|
||||||
|
|
||||||
@ -427,17 +427,16 @@ void JitArm64::WriteBLRExit(Arm64Gen::ARM64Reg dest)
|
|||||||
|
|
||||||
SetJumpTarget(no_match);
|
SetJumpTarget(no_match);
|
||||||
|
|
||||||
DoDownCount();
|
|
||||||
|
|
||||||
ResetStack();
|
ResetStack();
|
||||||
|
|
||||||
|
DoDownCount();
|
||||||
|
|
||||||
B(dispatcher);
|
B(dispatcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JitArm64::WriteExceptionExit(u32 destination, bool only_external)
|
void JitArm64::WriteExceptionExit(u32 destination, bool only_external)
|
||||||
{
|
{
|
||||||
Cleanup();
|
Cleanup();
|
||||||
DoDownCount();
|
|
||||||
|
|
||||||
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
|
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
|
||||||
MOVI2R(DISPATCHER_PC, destination);
|
MOVI2R(DISPATCHER_PC, destination);
|
||||||
@ -455,6 +454,7 @@ void JitArm64::WriteExceptionExit(u32 destination, bool only_external)
|
|||||||
SetJumpTarget(no_exceptions);
|
SetJumpTarget(no_exceptions);
|
||||||
|
|
||||||
EndTimeProfile(js.curBlock);
|
EndTimeProfile(js.curBlock);
|
||||||
|
DoDownCount();
|
||||||
|
|
||||||
B(dispatcher);
|
B(dispatcher);
|
||||||
}
|
}
|
||||||
@ -465,7 +465,6 @@ void JitArm64::WriteExceptionExit(ARM64Reg dest, bool only_external)
|
|||||||
MOV(DISPATCHER_PC, dest);
|
MOV(DISPATCHER_PC, dest);
|
||||||
|
|
||||||
Cleanup();
|
Cleanup();
|
||||||
DoDownCount();
|
|
||||||
|
|
||||||
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
|
LDR(INDEX_UNSIGNED, W30, PPC_REG, PPCSTATE_OFF(Exceptions));
|
||||||
FixupBranch no_exceptions = CBZ(W30);
|
FixupBranch no_exceptions = CBZ(W30);
|
||||||
@ -482,6 +481,7 @@ void JitArm64::WriteExceptionExit(ARM64Reg dest, bool only_external)
|
|||||||
SetJumpTarget(no_exceptions);
|
SetJumpTarget(no_exceptions);
|
||||||
|
|
||||||
EndTimeProfile(js.curBlock);
|
EndTimeProfile(js.curBlock);
|
||||||
|
DoDownCount();
|
||||||
|
|
||||||
B(dispatcher);
|
B(dispatcher);
|
||||||
}
|
}
|
||||||
@ -658,7 +658,7 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
|
|||||||
MOVI2R(W0, static_cast<u32>(JitInterface::ExceptionType::PairedQuantize));
|
MOVI2R(W0, static_cast<u32>(JitInterface::ExceptionType::PairedQuantize));
|
||||||
MOVP2R(X1, &JitInterface::CompileExceptionCheck);
|
MOVP2R(X1, &JitInterface::CompileExceptionCheck);
|
||||||
BLR(X1);
|
BLR(X1);
|
||||||
B(dispatcher);
|
B(dispatcher_no_check);
|
||||||
SwitchToNearCode();
|
SwitchToNearCode();
|
||||||
SetJumpTarget(no_fail);
|
SetJumpTarget(no_fail);
|
||||||
js.assumeNoPairedQuantize = true;
|
js.assumeNoPairedQuantize = true;
|
||||||
|
@ -594,12 +594,8 @@ void CheckExternalExceptions()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
DEBUG_ASSERT_MSG(POWERPC, 0, "Unknown EXT interrupt: Exceptions == %08x", exceptions);
|
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}",
|
ERROR_LOG_FMT(POWERPC, "Unknown EXTERNAL INTERRUPT exception: Exceptions == {:08x}",
|
||||||
exceptions);
|
exceptions);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user