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:
parent
a013638dcb
commit
de0ed1a5fb
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue