RSP: Handle break in delay slot
This commit is contained in:
parent
d3411809f7
commit
7161a6f591
|
@ -256,6 +256,7 @@ void Compile_BEQ(void)
|
||||||
if (RSPOpC.rs == 0 && RSPOpC.rt == 0)
|
if (RSPOpC.rs == 0 && RSPOpC.rt == 0)
|
||||||
{
|
{
|
||||||
NextInstruction = RSPPIPELINE_DO_DELAY_SLOT;
|
NextInstruction = RSPPIPELINE_DO_DELAY_SLOT;
|
||||||
|
MoveConstByteToVariable(1, &BranchCompare, "BranchCompare");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bDelayAffect = DelaySlotAffectBranch(CompilePC);
|
bDelayAffect = DelaySlotAffectBranch(CompilePC);
|
||||||
|
@ -338,6 +339,7 @@ void Compile_BNE(void)
|
||||||
CPU_Message(" %X %s", CompilePC, RSPInstruction(CompilePC, RSPOpC.Value).NameAndParam().c_str());
|
CPU_Message(" %X %s", CompilePC, RSPInstruction(CompilePC, RSPOpC.Value).NameAndParam().c_str());
|
||||||
if (RSPOpC.rs == 0 && RSPOpC.rt == 0)
|
if (RSPOpC.rs == 0 && RSPOpC.rt == 0)
|
||||||
{
|
{
|
||||||
|
MoveConstByteToVariable(0, &BranchCompare, "BranchCompare");
|
||||||
NextInstruction = RSPPIPELINE_DO_DELAY_SLOT;
|
NextInstruction = RSPPIPELINE_DO_DELAY_SLOT;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1544,6 +1546,10 @@ void Compile_Special_BREAK(void)
|
||||||
Ret();
|
Ret();
|
||||||
NextInstruction = RSPPIPELINE_FINISH_SUB_BLOCK;
|
NextInstruction = RSPPIPELINE_FINISH_SUB_BLOCK;
|
||||||
}
|
}
|
||||||
|
else if (NextInstruction == RSPPIPELINE_DELAY_SLOT)
|
||||||
|
{
|
||||||
|
NextInstruction = RSPPIPELINE_DELAY_SLOT_EXIT;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CompilerWarning(stdstr_f("WTF\n\nBREAK\nNextInstruction = %X", NextInstruction).c_str());
|
CompilerWarning(stdstr_f("WTF\n\nBREAK\nNextInstruction = %X", NextInstruction).c_str());
|
||||||
|
|
Loading…
Reference in New Issue