Interpreter_Integer: Set the overflow flag if the OE bit is set for neg
Also amends the condition that was being checked. Previously it was checking if the destination register value was 0x80000000, however it's actually the source register that should be checked.
This commit is contained in:
parent
675d2fb774
commit
2fa0cb91a1
|
@ -580,16 +580,15 @@ void Interpreter::mullwx(UGeckoInstruction inst)
|
||||||
|
|
||||||
void Interpreter::negx(UGeckoInstruction inst)
|
void Interpreter::negx(UGeckoInstruction inst)
|
||||||
{
|
{
|
||||||
rGPR[inst.RD] = (~rGPR[inst.RA]) + 1;
|
const u32 a = rGPR[inst.RA];
|
||||||
|
|
||||||
if (rGPR[inst.RD] == 0x80000000)
|
rGPR[inst.RD] = (~a) + 1;
|
||||||
{
|
|
||||||
if (inst.OE)
|
|
||||||
PanicAlert("OE: negx");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inst.Rc)
|
if (inst.Rc)
|
||||||
Helper_UpdateCR0(rGPR[inst.RD]);
|
Helper_UpdateCR0(rGPR[inst.RD]);
|
||||||
|
|
||||||
|
if (inst.OE && a == 0x80000000)
|
||||||
|
SetXER_OV(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Interpreter::subfx(UGeckoInstruction inst)
|
void Interpreter::subfx(UGeckoInstruction inst)
|
||||||
|
|
Loading…
Reference in New Issue