From 2fa0cb91a150e221cde870b5bda82c8ad48f8496 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 19 Mar 2018 11:29:21 -0400 Subject: [PATCH] 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. --- .../Core/PowerPC/Interpreter/Interpreter_Integer.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp index 3475eb4073..cfd6d3992f 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Integer.cpp @@ -580,16 +580,15 @@ void Interpreter::mullwx(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) - { - if (inst.OE) - PanicAlert("OE: negx"); - } + rGPR[inst.RD] = (~a) + 1; if (inst.Rc) Helper_UpdateCR0(rGPR[inst.RD]); + + if (inst.OE && a == 0x80000000) + SetXER_OV(true); } void Interpreter::subfx(UGeckoInstruction inst)