[Project64] Sync system in exit block
This commit is contained in:
parent
f5b4fae7fe
commit
9f10e7e0ca
|
@ -8779,6 +8779,17 @@ void CX86RecompilerOps::EnterCodeBlock()
|
||||||
|
|
||||||
void CX86RecompilerOps::ExitCodeBlock()
|
void CX86RecompilerOps::ExitCodeBlock()
|
||||||
{
|
{
|
||||||
|
if (g_SyncSystem)
|
||||||
|
{
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
||||||
|
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
||||||
|
#else
|
||||||
|
PushImm32((uint32_t)g_BaseSystem);
|
||||||
|
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
||||||
|
AddConstToX86Reg(x86_ESP, 4);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
Pop(x86_ESI);
|
Pop(x86_ESI);
|
||||||
#else
|
#else
|
||||||
|
@ -9658,17 +9669,6 @@ void CX86RecompilerOps::CompileSystemCheck(uint32_t TargetPC, const CRegInfo & R
|
||||||
Call_Direct(AddressOf(&CSystemEvents::ExecuteEvents), "CSystemEvents::ExecuteEvents");
|
Call_Direct(AddressOf(&CSystemEvents::ExecuteEvents), "CSystemEvents::ExecuteEvents");
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
AddConstToX86Reg(x86_ESP, 4);
|
||||||
#endif
|
#endif
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
CPU_Message("");
|
CPU_Message("");
|
||||||
CPU_Message(" $Continue_From_Interrupt_Test:");
|
CPU_Message(" $Continue_From_Interrupt_Test:");
|
||||||
|
@ -9716,19 +9716,6 @@ void CX86RecompilerOps::OverflowDelaySlot(bool TestTimer)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
UpdateSyncCPU(m_RegWorkingSet, g_System->CountPerOp());
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
m_NextInstruction = END_BLOCK;
|
m_NextInstruction = END_BLOCK;
|
||||||
}
|
}
|
||||||
|
@ -9909,18 +9896,6 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
Call_Direct(AddressOf(&CSystemEvents::ExecuteEvents), "CSystemEvents::ExecuteEvents");
|
Call_Direct(AddressOf(&CSystemEvents::ExecuteEvents), "CSystemEvents::ExecuteEvents");
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
AddConstToX86Reg(x86_ESP, 4);
|
||||||
#endif
|
#endif
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
//g_System->SyncCPU(g_SyncSystem);
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
break;
|
break;
|
||||||
case CExitInfo::DoSysCall:
|
case CExitInfo::DoSysCall:
|
||||||
|
@ -9935,17 +9910,6 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
Call_Direct(AddressOf(&CRegisters::DoSysCallException), "CRegisters::DoSysCallException");
|
Call_Direct(AddressOf(&CRegisters::DoSysCallException), "CRegisters::DoSysCallException");
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
AddConstToX86Reg(x86_ESP, 4);
|
||||||
#endif
|
#endif
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -9962,17 +9926,6 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
Call_Direct(AddressOf(&CRegisters::DoCopUnusableException), "CRegisters::DoCopUnusableException");
|
Call_Direct(AddressOf(&CRegisters::DoCopUnusableException), "CRegisters::DoCopUnusableException");
|
||||||
AddConstToX86Reg(x86_ESP, 12);
|
AddConstToX86Reg(x86_ESP, 12);
|
||||||
#endif
|
#endif
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -10006,17 +9959,6 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
Call_Direct(AddressOf(&CRegisters::DoTLBReadMiss), "CRegisters::DoTLBReadMiss");
|
Call_Direct(AddressOf(&CRegisters::DoTLBReadMiss), "CRegisters::DoTLBReadMiss");
|
||||||
AddConstToX86Reg(x86_ESP, 12);
|
AddConstToX86Reg(x86_ESP, 12);
|
||||||
#endif
|
#endif
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
#else
|
|
||||||
PushImm32((uint32_t)g_BaseSystem);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
AddConstToX86Reg(x86_ESP, 4);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
break;
|
break;
|
||||||
case CExitInfo::TLBWriteMiss:
|
case CExitInfo::TLBWriteMiss:
|
||||||
|
@ -10032,11 +9974,6 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
}
|
}
|
||||||
MoveConstToVariable(0, &_RegHI->UW[0], "_RegHI->UW[0]");
|
MoveConstToVariable(0, &_RegHI->UW[0], "_RegHI->UW[0]");
|
||||||
MoveConstToVariable(0, &_RegLO->UW[0], "_RegLO->UW[0]");
|
MoveConstToVariable(0, &_RegLO->UW[0], "_RegLO->UW[0]");
|
||||||
if (g_SyncSystem)
|
|
||||||
{
|
|
||||||
MoveConstToX86reg((uint32_t)g_BaseSystem, x86_ECX);
|
|
||||||
Call_Direct(AddressOf(&CN64System::SyncSystem), "CN64System::SyncSystem");
|
|
||||||
}
|
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue