Fixed issues where JR did not check timer if jumping to constant
This commit is contained in:
parent
5716e32ee8
commit
beb6b0c244
|
@ -2005,14 +2005,6 @@ void CRecompilerOps::SPECIAL_JR (void) {
|
||||||
m_Section->m_Cont.FallThrough = FALSE;
|
m_Section->m_Cont.FallThrough = FALSE;
|
||||||
m_Section->m_Cont.LinkLocation = NULL;
|
m_Section->m_Cont.LinkLocation = NULL;
|
||||||
m_Section->m_Cont.LinkLocation2 = NULL;
|
m_Section->m_Cont.LinkLocation2 = NULL;
|
||||||
if ((m_CompilePC & 0xFFC) == 0xFFC) {
|
|
||||||
_Notify->BreakPoint(__FILE__,__LINE__);
|
|
||||||
#ifdef tofix
|
|
||||||
m_Section->GenerateSectionLinkage();
|
|
||||||
m_NextInstruction = END_BLOCK;
|
|
||||||
#endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
m_Section->m_Jump.FallThrough = false;
|
m_Section->m_Jump.FallThrough = false;
|
||||||
m_Section->m_Jump.LinkLocation = NULL;
|
m_Section->m_Jump.LinkLocation = NULL;
|
||||||
|
@ -2035,6 +2027,7 @@ void CRecompilerOps::SPECIAL_JR (void) {
|
||||||
if (DelaySlotEffectsCompare(m_CompilePC,m_Opcode.rs,0)) {
|
if (DelaySlotEffectsCompare(m_CompilePC,m_Opcode.rs,0)) {
|
||||||
m_Section->CompileExit(m_CompilePC,(DWORD)-1,m_RegWorkingSet,CExitInfo::Normal,TRUE,NULL);
|
m_Section->CompileExit(m_CompilePC,(DWORD)-1,m_RegWorkingSet,CExitInfo::Normal,TRUE,NULL);
|
||||||
} else {
|
} else {
|
||||||
|
UpdateCounters(m_RegWorkingSet,true,true);
|
||||||
if (IsConst(m_Opcode.rs)) {
|
if (IsConst(m_Opcode.rs)) {
|
||||||
m_Section->m_Jump.JumpPC = m_Section->m_Jump.TargetPC + 4;
|
m_Section->m_Jump.JumpPC = m_Section->m_Jump.TargetPC + 4;
|
||||||
m_Section->m_Jump.RegSet = m_RegWorkingSet;
|
m_Section->m_Jump.RegSet = m_RegWorkingSet;
|
||||||
|
@ -2045,7 +2038,6 @@ void CRecompilerOps::SPECIAL_JR (void) {
|
||||||
} else {
|
} else {
|
||||||
MoveX86regToVariable(Map_TempReg(x86_Any,m_Opcode.rs,FALSE),_PROGRAM_COUNTER, "PROGRAM_COUNTER");
|
MoveX86regToVariable(Map_TempReg(x86_Any,m_Opcode.rs,FALSE),_PROGRAM_COUNTER, "PROGRAM_COUNTER");
|
||||||
}
|
}
|
||||||
UpdateCounters(m_RegWorkingSet,true,true);
|
|
||||||
m_Section->CompileExit(-1, (DWORD)-1,m_RegWorkingSet,CExitInfo::Normal,TRUE,NULL);
|
m_Section->CompileExit(-1, (DWORD)-1,m_RegWorkingSet,CExitInfo::Normal,TRUE,NULL);
|
||||||
if (m_Section->m_JumpSection)
|
if (m_Section->m_JumpSection)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue