CCodeBlock::AnalyzeInstruction: better handling of R4300i_REGIMM_BLTZ

This commit is contained in:
zilmar 2012-12-22 19:44:26 +11:00
parent 9a740d4538
commit 5cc6a91a41
1 changed files with 10 additions and 8 deletions

View File

@ -409,14 +409,15 @@ bool CCodeBlock::AnalyzeInstruction ( DWORD PC, DWORD & TargetPC, DWORD & Contin
TargetPC = PC + ((short)Command.offset << 2) + 4; TargetPC = PC + ((short)Command.offset << 2) + 4;
if (TargetPC == PC + 8) if (TargetPC == PC + 8)
{ {
g_Notify->BreakPoint(__FILE__,__LINE__); TargetPC = (DWORD)-1;
} } else {
if (TargetPC == PC) if (TargetPC == PC && !DelaySlotEffectsCompare(PC,Command.rs,0))
{ {
g_Notify->BreakPoint(__FILE__,__LINE__); PermLoop = true;
} }
ContinuePC = PC + 8; ContinuePC = PC + 8;
IncludeDelaySlot = true; IncludeDelaySlot = true;
}
break; break;
case R4300i_REGIMM_BGEZ: case R4300i_REGIMM_BGEZ:
case R4300i_REGIMM_BGEZAL: case R4300i_REGIMM_BGEZAL:
@ -624,7 +625,8 @@ bool CCodeBlock::AnalyzeInstruction ( DWORD PC, DWORD & TargetPC, DWORD & Contin
IncludeDelaySlot = true; IncludeDelaySlot = true;
break; break;
default: default:
if (Command.Hex == 0x7C1C97C0) if (Command.Hex == 0x7C1C97C0 ||
Command.Hex == 0xF1F3F5F7)
{ {
EndBlock = true; EndBlock = true;
break; break;