Merge pull request #3716 from degasus/coretiming

CoreTiming: Drop ProcessFifoWaitEvents.
This commit is contained in:
Scott Mansell 2016-06-26 22:13:05 +12:00 committed by GitHub
commit b16333a25c
5 changed files with 2 additions and 74 deletions

View File

@ -389,30 +389,6 @@ void ForceExceptionCheck(s64 cycles)
} }
} }
// This raise only the events required while the fifo is processing data
void ProcessFifoWaitEvents()
{
MoveEvents();
if (!first)
return;
while (first)
{
if (first->time <= g_globalTimer)
{
Event* evt = first;
first = first->next;
event_types[evt->type].callback(evt->userdata, (int)(g_globalTimer - evt->time));
FreeEvent(evt);
}
else
{
break;
}
}
}
void MoveEvents() void MoveEvents()
{ {
BaseEvent sevt; BaseEvent sevt;
@ -480,14 +456,11 @@ void LogPendingEvents()
void Idle() void Idle()
{ {
// DEBUG_LOG(POWERPC, "Idle");
if (SConfig::GetInstance().bSyncGPUOnSkipIdleHack) if (SConfig::GetInstance().bSyncGPUOnSkipIdleHack)
{ {
// When the FIFO is processing data we must not advance because in this way // When the FIFO is processing data we must not advance because in this way
// the VI will be desynchronized. So, We are waiting until the FIFO finish and // the VI will be desynchronized. So, We are waiting until the FIFO finish and
// while we process only the events required by the FIFO. // while we process only the events required by the FIFO.
ProcessFifoWaitEvents();
Fifo::FlushGpu(); Fifo::FlushGpu();
} }

View File

@ -60,7 +60,6 @@ void RemoveEvent(int event_type);
void RemoveAllEvents(int event_type); void RemoveAllEvents(int event_type);
void Advance(); void Advance();
void MoveEvents(); void MoveEvents();
void ProcessFifoWaitEvents();
// Pretend that the main CPU has executed enough cycles to reach the next event. // Pretend that the main CPU has executed enough cycles to reach the next event.
void Idle(); void Idle();

View File

@ -418,44 +418,9 @@ void CheckExceptions()
} }
// EXTERNAL INTERRUPT // EXTERNAL INTERRUPT
else if (MSR & 0x0008000) // Handling is delayed until MSR.EE=1. else
{ {
if (exceptions & EXCEPTION_EXTERNAL_INT) CheckExternalExceptions();
{
// Pokemon gets this "too early", it hasn't a handler yet
SRR0 = NPC;
SRR1 = MSR & 0x87C0FFFF;
MSR |= (MSR >> 16) & 1;
MSR &= ~0x04EF36;
PC = NPC = 0x00000500;
INFO_LOG(POWERPC, "EXCEPTION_EXTERNAL_INT");
ppcState.Exceptions &= ~EXCEPTION_EXTERNAL_INT;
_dbg_assert_msg_(POWERPC, (SRR1 & 0x02) != 0, "EXTERNAL_INT unrecoverable???");
}
else if (exceptions & EXCEPTION_PERFORMANCE_MONITOR)
{
SRR0 = NPC;
SRR1 = MSR & 0x87C0FFFF;
MSR |= (MSR >> 16) & 1;
MSR &= ~0x04EF36;
PC = NPC = 0x00000F00;
INFO_LOG(POWERPC, "EXCEPTION_PERFORMANCE_MONITOR");
ppcState.Exceptions &= ~EXCEPTION_PERFORMANCE_MONITOR;
}
else if (exceptions & EXCEPTION_DECREMENTER)
{
SRR0 = NPC;
SRR1 = MSR & 0x87C0FFFF;
MSR |= (MSR >> 16) & 1;
MSR &= ~0x04EF36;
PC = NPC = 0x00000900;
INFO_LOG(POWERPC, "EXCEPTION_DECREMENTER");
ppcState.Exceptions &= ~EXCEPTION_DECREMENTER;
}
} }
} }

View File

@ -276,7 +276,6 @@ void GatherPipeBursted()
if (IsOnThread()) if (IsOnThread())
SetCPStatusFromCPU(); SetCPStatusFromCPU();
ProcessFifoEvents();
// if we aren't linked, we don't care about gather pipe data // if we aren't linked, we don't care about gather pipe data
if (!m_CPCtrlReg.GPLinkEnable) if (!m_CPCtrlReg.GPLinkEnable)
{ {
@ -454,13 +453,6 @@ void SetCPStatusFromCPU()
} }
} }
void ProcessFifoEvents()
{
if (IsOnThread() && (s_interrupt_waiting.load() || s_interrupt_finish_waiting.load() ||
s_interrupt_token_waiting.load()))
CoreTiming::ProcessFifoWaitEvents();
}
void Shutdown() void Shutdown()
{ {
} }

View File

@ -137,6 +137,5 @@ void SetInterruptFinishWaiting(bool waiting);
void SetCpClearRegister(); void SetCpClearRegister();
void SetCpControlRegister(); void SetCpControlRegister();
void SetCpStatusRegister(); void SetCpStatusRegister();
void ProcessFifoEvents();
} // namespace CommandProcessor } // namespace CommandProcessor