Core: Fix handling of BGEZAL ra in recompiler
This commit is contained in:
parent
f6e4443dda
commit
2c6d3429b7
|
@ -759,6 +759,20 @@ void CX86RecompilerOps::Compile_Branch(RecompilerBranchCompare CompareType, bool
|
||||||
ResetX86Protection();
|
ResetX86Protection();
|
||||||
m_Section->m_Cont.RegSet = m_RegWorkingSet;
|
m_Section->m_Cont.RegSet = m_RegWorkingSet;
|
||||||
m_Section->m_Jump.RegSet = m_RegWorkingSet;
|
m_Section->m_Jump.RegSet = m_RegWorkingSet;
|
||||||
|
if (m_Section->m_Cont.LinkAddress != (uint32_t)-1)
|
||||||
|
{
|
||||||
|
m_Section->m_Cont.RegSet.UnMap_GPR(31, false);
|
||||||
|
m_Section->m_Cont.RegSet.SetMipsRegLo(31, m_Section->m_Cont.LinkAddress);
|
||||||
|
m_Section->m_Cont.RegSet.SetMipsRegState(31, CRegInfo::STATE_CONST_32_SIGN);
|
||||||
|
m_Section->m_Cont.LinkAddress = (uint32_t)-1;
|
||||||
|
}
|
||||||
|
if (m_Section->m_Jump.LinkAddress != (uint32_t)-1)
|
||||||
|
{
|
||||||
|
m_Section->m_Jump.RegSet.UnMap_GPR(31, false);
|
||||||
|
m_Section->m_Jump.RegSet.SetMipsRegLo(31, m_Section->m_Jump.LinkAddress);
|
||||||
|
m_Section->m_Jump.RegSet.SetMipsRegState(31, CRegInfo::STATE_CONST_32_SIGN);
|
||||||
|
m_Section->m_Jump.LinkAddress = (uint32_t)-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -9305,7 +9319,6 @@ void CX86RecompilerOps::OverflowDelaySlot(bool TestTimer)
|
||||||
}
|
}
|
||||||
m_Assembler.MoveConstToVariable(&g_System->m_PipelineStage, "System->m_PipelineStage", PIPELINE_STAGE_JUMP);
|
m_Assembler.MoveConstToVariable(&g_System->m_PipelineStage, "System->m_PipelineStage", PIPELINE_STAGE_JUMP);
|
||||||
|
|
||||||
|
|
||||||
if (TestTimer)
|
if (TestTimer)
|
||||||
{
|
{
|
||||||
m_Assembler.MoveConstToVariable(&R4300iOp::m_TestTimer, "R4300iOp::m_TestTimer", TestTimer);
|
m_Assembler.MoveConstToVariable(&R4300iOp::m_TestTimer, "R4300iOp::m_TestTimer", TestTimer);
|
||||||
|
|
Loading…
Reference in New Issue