Core: Get recompiler to handle RESERVED31
This commit is contained in:
parent
d06d1526d9
commit
6c9237f603
|
@ -144,6 +144,11 @@ void CAarch64RecompilerOps::LDR()
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CAarch64RecompilerOps::RESERVED31()
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
void CAarch64RecompilerOps::LB()
|
void CAarch64RecompilerOps::LB()
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
void RESERVED31();
|
||||||
void LB();
|
void LB();
|
||||||
void LH();
|
void LH();
|
||||||
void LWL();
|
void LWL();
|
||||||
|
|
|
@ -145,6 +145,11 @@ void CArmRecompilerOps::LDR()
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CArmRecompilerOps::RESERVED31()
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
void CArmRecompilerOps::LB()
|
void CArmRecompilerOps::LB()
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
|
|
@ -49,6 +49,7 @@ public:
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
void RESERVED31();
|
||||||
void LB();
|
void LB();
|
||||||
void LH();
|
void LH();
|
||||||
void LWL();
|
void LWL();
|
||||||
|
|
|
@ -772,6 +772,10 @@ bool CCodeBlock::AnalyzeInstruction(uint32_t PC, uint32_t & TargetPC, uint32_t &
|
||||||
case R4300i_DADDIU:
|
case R4300i_DADDIU:
|
||||||
case R4300i_LDL:
|
case R4300i_LDL:
|
||||||
case R4300i_LDR:
|
case R4300i_LDR:
|
||||||
|
break;
|
||||||
|
case R4300i_RESERVED31:
|
||||||
|
EndBlock = true;
|
||||||
|
break;
|
||||||
case R4300i_LB:
|
case R4300i_LB:
|
||||||
case R4300i_LH:
|
case R4300i_LH:
|
||||||
case R4300i_LWL:
|
case R4300i_LWL:
|
||||||
|
|
|
@ -646,6 +646,7 @@ bool CCodeSection::GenerateNativeCode(uint32_t Test)
|
||||||
case R4300i_DADDIU: m_RecompilerOps->DADDIU(); break;
|
case R4300i_DADDIU: m_RecompilerOps->DADDIU(); break;
|
||||||
case R4300i_LDL: m_RecompilerOps->LDL(); break;
|
case R4300i_LDL: m_RecompilerOps->LDL(); break;
|
||||||
case R4300i_LDR: m_RecompilerOps->LDR(); break;
|
case R4300i_LDR: m_RecompilerOps->LDR(); break;
|
||||||
|
case R4300i_RESERVED31: m_RecompilerOps->RESERVED31(); break;
|
||||||
case R4300i_LB: m_RecompilerOps->LB(); break;
|
case R4300i_LB: m_RecompilerOps->LB(); break;
|
||||||
case R4300i_LH: m_RecompilerOps->LH(); break;
|
case R4300i_LH: m_RecompilerOps->LH(); break;
|
||||||
case R4300i_LWL: m_RecompilerOps->LWL(); break;
|
case R4300i_LWL: m_RecompilerOps->LWL(); break;
|
||||||
|
|
|
@ -19,6 +19,7 @@ enum ExitReason
|
||||||
ExitReason_ExceptionOverflow,
|
ExitReason_ExceptionOverflow,
|
||||||
ExitReason_AddressErrorExceptionRead32,
|
ExitReason_AddressErrorExceptionRead32,
|
||||||
ExitReason_AddressErrorExceptionRead64,
|
ExitReason_AddressErrorExceptionRead64,
|
||||||
|
ExitReason_IllegalInstruction,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CExitInfo
|
struct CExitInfo
|
||||||
|
|
|
@ -143,6 +143,11 @@ void CX64RecompilerOps::LDR()
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CX64RecompilerOps::RESERVED31()
|
||||||
|
{
|
||||||
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
void CX64RecompilerOps::LB()
|
void CX64RecompilerOps::LB()
|
||||||
{
|
{
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
void RESERVED31();
|
||||||
void LB();
|
void LB();
|
||||||
void LH();
|
void LH();
|
||||||
void LWL();
|
void LWL();
|
||||||
|
|
|
@ -3036,6 +3036,13 @@ void CX86RecompilerOps::LH_KnownAddress(CX86Ops::x86Reg Reg, uint32_t VAddr, boo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CX86RecompilerOps::RESERVED31()
|
||||||
|
{
|
||||||
|
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_System->CountPerOp());
|
||||||
|
CompileExit(m_CompilePC, m_CompilePC, m_RegWorkingSet, ExitReason_IllegalInstruction, true, nullptr);
|
||||||
|
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
|
||||||
|
}
|
||||||
|
|
||||||
void CX86RecompilerOps::LB()
|
void CX86RecompilerOps::LB()
|
||||||
{
|
{
|
||||||
if (m_Opcode.rt == 0)
|
if (m_Opcode.rt == 0)
|
||||||
|
@ -4499,7 +4506,7 @@ void CX86RecompilerOps::SPECIAL_JALR()
|
||||||
void CX86RecompilerOps::SPECIAL_SYSCALL()
|
void CX86RecompilerOps::SPECIAL_SYSCALL()
|
||||||
{
|
{
|
||||||
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_System->CountPerOp());
|
m_RegWorkingSet.SetBlockCycleCount(m_RegWorkingSet.GetBlockCycleCount() + g_System->CountPerOp());
|
||||||
CompileExit(m_CompilePC, (uint32_t)-1, m_RegWorkingSet, ExitReason_DoSysCall, true, nullptr);
|
CompileExit(m_CompilePC, m_CompilePC, m_RegWorkingSet, ExitReason_DoSysCall, true, nullptr);
|
||||||
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
|
m_PipelineStage = PIPELINE_STAGE_END_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9636,6 +9643,11 @@ void CX86RecompilerOps::CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo
|
||||||
m_Assembler.CallThis((uint32_t)g_Reg, AddressOf(&CRegisters::DoAddressError), "CRegisters::DoAddressError", 12);
|
m_Assembler.CallThis((uint32_t)g_Reg, AddressOf(&CRegisters::DoAddressError), "CRegisters::DoAddressError", 12);
|
||||||
ExitCodeBlock();
|
ExitCodeBlock();
|
||||||
break;
|
break;
|
||||||
|
case ExitReason_IllegalInstruction:
|
||||||
|
m_Assembler.PushImm32(InDelaySlot ? "true" : "false", InDelaySlot);
|
||||||
|
m_Assembler.CallThis((uint32_t)g_Reg, AddressOf(&CRegisters::DoIllegalInstructionException), "CRegisters::DoIllegalInstructionException", 8);
|
||||||
|
ExitCodeBlock();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
WriteTrace(TraceRecompiler, TraceError, "How did you want to exit on reason (%d) ???", reason);
|
WriteTrace(TraceRecompiler, TraceError, "How did you want to exit on reason (%d) ???", reason);
|
||||||
g_Notify->BreakPoint(__FILE__, __LINE__);
|
g_Notify->BreakPoint(__FILE__, __LINE__);
|
||||||
|
|
|
@ -57,6 +57,7 @@ public:
|
||||||
void DADDIU();
|
void DADDIU();
|
||||||
void LDL();
|
void LDL();
|
||||||
void LDR();
|
void LDR();
|
||||||
|
void RESERVED31();
|
||||||
void LB();
|
void LB();
|
||||||
void LH();
|
void LH();
|
||||||
void LWL();
|
void LWL();
|
||||||
|
|
Loading…
Reference in New Issue