mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-09-21 11:51:48 +02:00
Interpreter: Fix CoreTiming contract
The interpreter does not use CoreTiming correctly. Calls to Advance must be made in advance of executing the associated slice, not afterwards.
This commit is contained in:
parent
54a643a4a3
commit
1bcd129683
1 changed files with 9 additions and 3 deletions
|
@ -196,11 +196,14 @@ int Interpreter::SingleStepInner()
|
||||||
|
|
||||||
void Interpreter::SingleStep()
|
void Interpreter::SingleStep()
|
||||||
{
|
{
|
||||||
|
// Declare start of new slice
|
||||||
|
CoreTiming::Advance();
|
||||||
|
|
||||||
SingleStepInner();
|
SingleStepInner();
|
||||||
|
|
||||||
|
// The interpreter ignores instruction timing information outside the 'fast runloop'.
|
||||||
CoreTiming::g_slice_length = 1;
|
CoreTiming::g_slice_length = 1;
|
||||||
PowerPC::ppcState.downcount = 0;
|
PowerPC::ppcState.downcount = 0;
|
||||||
CoreTiming::Advance();
|
|
||||||
|
|
||||||
if (PowerPC::ppcState.Exceptions)
|
if (PowerPC::ppcState.Exceptions)
|
||||||
{
|
{
|
||||||
|
@ -222,6 +225,11 @@ void Interpreter::Run()
|
||||||
{
|
{
|
||||||
while (!CPU::GetState())
|
while (!CPU::GetState())
|
||||||
{
|
{
|
||||||
|
// CoreTiming Advance() ends the previous slice and declares the start of the next
|
||||||
|
// one so it must always be called at the start. At boot, we are in slice -1 and must
|
||||||
|
// advance into slice 0 to get a correct slice length before executing any cycles.
|
||||||
|
CoreTiming::Advance();
|
||||||
|
|
||||||
// we have to check exceptions at branches apparently (or maybe just rfi?)
|
// we have to check exceptions at branches apparently (or maybe just rfi?)
|
||||||
if (SConfig::GetInstance().bEnableDebugging)
|
if (SConfig::GetInstance().bEnableDebugging)
|
||||||
{
|
{
|
||||||
|
@ -295,8 +303,6 @@ void Interpreter::Run()
|
||||||
PowerPC::ppcState.downcount -= cycles;
|
PowerPC::ppcState.downcount -= cycles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CoreTiming::Advance();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue