From f1e6532ec02ad7671103ce29bc842092f8a35e77 Mon Sep 17 00:00:00 2001 From: scribam Date: Tue, 26 Jun 2018 22:11:08 +0200 Subject: [PATCH] ppu: improve fnmsub instruction --- rpcs3/Emu/Cell/PPUInterpreter.cpp | 2 +- rpcs3/Emu/Cell/PPUTranslator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.cpp b/rpcs3/Emu/Cell/PPUInterpreter.cpp index 9806f57e6b..28cc1a65e7 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.cpp +++ b/rpcs3/Emu/Cell/PPUInterpreter.cpp @@ -4813,7 +4813,7 @@ bool ppu_interpreter::FMADD(ppu_thread& ppu, ppu_opcode_t op) bool ppu_interpreter::FNMSUB(ppu_thread& ppu, ppu_opcode_t op) { - ppu.fpr[op.frd] = -(ppu.fpr[op.fra] * ppu.fpr[op.frc]) + ppu.fpr[op.frb]; + ppu.fpr[op.frd] = -(ppu.fpr[op.fra] * ppu.fpr[op.frc] - ppu.fpr[op.frb]); if (UNLIKELY(op.rc)) fmt::throw_exception("%s: op.rc", __func__); //ppu_cr_set(ppu, 1, ppu.fpscr.fg, ppu.fpscr.fl, ppu.fpscr.fe, ppu.fpscr.fu); return true; } diff --git a/rpcs3/Emu/Cell/PPUTranslator.cpp b/rpcs3/Emu/Cell/PPUTranslator.cpp index eb6b393c27..89f65efecd 100644 --- a/rpcs3/Emu/Cell/PPUTranslator.cpp +++ b/rpcs3/Emu/Cell/PPUTranslator.cpp @@ -4189,7 +4189,7 @@ void PPUTranslator::FNMSUB(ppu_opcode_t op) const auto a = GetFpr(op.fra); const auto b = GetFpr(op.frb); const auto c = GetFpr(op.frc); - const auto result = m_ir->CreateFSub(b, m_ir->CreateFMul(a, c)); + const auto result = m_ir->CreateFNeg(m_ir->CreateFSub(m_ir->CreateFMul(a, c), b)); SetFpr(op.frd, result); //SetFPSCR_FR(Call(GetType(), m_pure_attr, "__fmadd_get_fr", a, b, c)); // TODO ???