re-ordered CPU interpreter main loop if/else branch predictor

This commit is contained in:
unknown 2015-12-03 20:10:26 -05:00
parent d87a5cedc0
commit 2c3c13862b
1 changed files with 50 additions and 51 deletions

View File

@ -276,8 +276,13 @@ void CInterpreterCPU::ExecuteCPU()
{
while (!Done)
{
if (g_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex))
if (!g_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex))
{
g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP, PROGRAM_COUNTER);
R4300iOp::m_NextInstruction = NORMAL;
continue;
}
/* if (PROGRAM_COUNTER > 0x80000300 && PROGRAM_COUNTER < 0x80380000)
{
WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER));
@ -333,12 +338,6 @@ void CInterpreterCPU::ExecuteCPU()
g_Notify->BreakPoint(__FILEW__, __LINE__);
}
}
else
{
g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP, PROGRAM_COUNTER);
R4300iOp::m_NextInstruction = NORMAL;
}
}
}
__except (g_MMU->MemoryFilter(GetExceptionCode(), GetExceptionInformation()))
{