Core: Fix handling of BGEZAL ra in recompiler

This commit is contained in:
zilmar 2022-12-26 16:14:05 +10:30
parent f6e4443dda
commit 2c6d3429b7
1 changed files with 14 additions and 1 deletions

View File

@ -759,6 +759,20 @@ void CX86RecompilerOps::Compile_Branch(RecompilerBranchCompare CompareType, bool
ResetX86Protection();
m_Section->m_Cont.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
{
@ -9305,7 +9319,6 @@ void CX86RecompilerOps::OverflowDelaySlot(bool TestTimer)
}
m_Assembler.MoveConstToVariable(&g_System->m_PipelineStage, "System->m_PipelineStage", PIPELINE_STAGE_JUMP);
if (TestTimer)
{
m_Assembler.MoveConstToVariable(&R4300iOp::m_TestTimer, "R4300iOp::m_TestTimer", TestTimer);