mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Interpreter_LoadStore: Update the DAR if a DSI exception occurs in eciwx and ecowx
Also once a DSI exception occurs, execution is supposed to leave the instruction immediately. It doesn't finish execution.
This commit is contained in:
@ -24,6 +24,12 @@ void GenerateAlignmentException(u32 address)
|
||||
PowerPC::ppcState.Exceptions |= EXCEPTION_ALIGNMENT;
|
||||
PowerPC::ppcState.spr[SPR_DAR] = address;
|
||||
}
|
||||
|
||||
void GenerateDSIException(u32 address)
|
||||
{
|
||||
PowerPC::ppcState.Exceptions |= EXCEPTION_DSI;
|
||||
PowerPC::ppcState.spr[SPR_DAR] = address;
|
||||
}
|
||||
}
|
||||
|
||||
u32 Interpreter::Helper_Get_EA(const UGeckoInstruction inst)
|
||||
@ -431,7 +437,8 @@ void Interpreter::eciwx(UGeckoInstruction inst)
|
||||
|
||||
if (!(PowerPC::ppcState.spr[SPR_EAR] & 0x80000000))
|
||||
{
|
||||
PowerPC::ppcState.Exceptions |= EXCEPTION_DSI;
|
||||
GenerateDSIException(EA);
|
||||
return;
|
||||
}
|
||||
|
||||
if (EA & 3)
|
||||
@ -449,7 +456,8 @@ void Interpreter::ecowx(UGeckoInstruction inst)
|
||||
|
||||
if (!(PowerPC::ppcState.spr[SPR_EAR] & 0x80000000))
|
||||
{
|
||||
PowerPC::ppcState.Exceptions |= EXCEPTION_DSI;
|
||||
GenerateDSIException(EA);
|
||||
return;
|
||||
}
|
||||
|
||||
if (EA & 3)
|
||||
|
Reference in New Issue
Block a user