recompiler: Remove double check of timer done for branch when delay slot effects compare

This commit is contained in:
zilmar 2013-01-16 06:00:57 +11:00
parent 55e4db8911
commit 3933cdef08
4 changed files with 8 additions and 3 deletions

View File

@ -449,7 +449,7 @@ void CCodeSection::GenerateSectionLinkage (void)
JumpInfo[i]->LinkLocation2 = NULL;
}
}
CompileExit (CompilePC(), JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,CExitInfo::Normal,true,NULL);
CompileExit (JumpInfo[i]->JumpPC, JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,JumpInfo[i]->ExitReason,true,NULL);
JumpInfo[i]->FallThrough = false;
} else if (TargetSection[i] != NULL && JumpInfo[i] != NULL) {
if (!JumpInfo[i]->FallThrough) { continue; }
@ -462,7 +462,7 @@ void CCodeSection::GenerateSectionLinkage (void)
JumpInfo[i]->LinkLocation2 = NULL;
}
}
CompileExit (CompilePC(), JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,CExitInfo::Normal,true,NULL);
CompileExit (JumpInfo[i]->JumpPC, JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,JumpInfo[i]->ExitReason,true,NULL);
//FreeSection(TargetSection[i],Section);
}
}
@ -586,7 +586,7 @@ void CCodeSection::GenerateSectionLinkage (void)
SetJump32(JumpInfo[i]->LinkLocation2,(DWORD *)m_RecompPos);
JumpInfo[i]->LinkLocation2 = NULL;
}
CompileExit (CompilePC(),JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,CExitInfo::Normal,true,NULL);
CompileExit (JumpInfo[i]->JumpPC,JumpInfo[i]->TargetPC,JumpInfo[i]->RegSet,JumpInfo[i]->ExitReason,true,NULL);
continue;
}
if (JumpInfo[i]->TargetPC != TargetSection[i]->m_EnterPC)

View File

@ -12,6 +12,7 @@
class CJumpInfo
{
typedef CExitInfo::EXIT_REASON EXIT_REASON;
public:
CJumpInfo();
@ -24,4 +25,5 @@ public:
bool PermLoop;
bool DoneDelaySlot; //maybe deletable
CRegInfo RegSet;
EXIT_REASON ExitReason;
};

View File

@ -241,6 +241,8 @@ void CRecompilerOps::Compile_Branch (CRecompilerOps::BranchFunction CompareFunc,
CPU_Message("CompileSystemCheck 12");
CompileSystemCheck(FallInfo->TargetPC,m_Section->m_Jump.RegSet);
ResetX86Protection();
FallInfo->ExitReason = CExitInfo::Normal_NoSysCheck;
FallInfo->JumpPC = (DWORD)-1;
}
} else {
if (m_Section->m_ContinueSection != NULL) {

View File

@ -20,6 +20,7 @@ CJumpInfo::CJumpInfo()
FallThrough = false;
PermLoop = false;
DoneDelaySlot = false;
ExitReason = CExitInfo::Normal;
}
#ifdef tofix