GPU/MMEInterpreter: Ignore the 'exit' flag when it's executed inside a delay slot.
It seems instructions marked with the 'exit' flag will not cause an exit when executed within a delay slot. This was hwtested by fincs.
This commit is contained in:
parent
7cb17834c7
commit
9ef45f00bf
|
@ -118,10 +118,10 @@ bool MacroInterpreter::Step(u32 offset, bool is_delay_slot) {
|
||||||
static_cast<u32>(opcode.operation.Value()));
|
static_cast<u32>(opcode.operation.Value()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opcode.is_exit) {
|
// An instruction with the Exit flag will not actually
|
||||||
|
// cause an exit if it's executed inside a delay slot.
|
||||||
|
if (opcode.is_exit && !is_delay_slot) {
|
||||||
// Exit has a delay slot, execute the next instruction
|
// Exit has a delay slot, execute the next instruction
|
||||||
// Note: Executing an exit during a branch delay slot will cause the instruction at the
|
|
||||||
// branch target to be executed before exiting.
|
|
||||||
Step(offset, true);
|
Step(offset, true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue