ppu: improve fnmsubs instruction

This commit is contained in:
scribam 2018-06-26 22:11:08 +02:00 committed by Ivan
parent f1e6532ec0
commit 733efc6b0d
2 changed files with 2 additions and 2 deletions

View File

@ -4660,7 +4660,7 @@ bool ppu_interpreter::FMSUBS(ppu_thread& ppu, ppu_opcode_t op)
bool ppu_interpreter::FNMSUBS(ppu_thread& ppu, ppu_opcode_t op) bool ppu_interpreter::FNMSUBS(ppu_thread& ppu, ppu_opcode_t op)
{ {
ppu.fpr[op.frd] = f32(-(ppu.fpr[op.fra] * ppu.fpr[op.frc]) + ppu.fpr[op.frb]); ppu.fpr[op.frd] = f32(-(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); 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; return true;
} }

View File

@ -3887,7 +3887,7 @@ void PPUTranslator::FNMSUBS(ppu_opcode_t op)
const auto a = GetFpr(op.fra); const auto a = GetFpr(op.fra);
const auto b = GetFpr(op.frb); const auto b = GetFpr(op.frb);
const auto c = GetFpr(op.frc); const auto c = GetFpr(op.frc);
const auto result = m_ir->CreateFPTrunc(m_ir->CreateFSub(b, m_ir->CreateFMul(a, c)), GetType<f32>()); const auto result = m_ir->CreateFPTrunc(m_ir->CreateFNeg(m_ir->CreateFSub(m_ir->CreateFMul(a, c), b)), GetType<f32>());
SetFpr(op.frd, result); SetFpr(op.frd, result);
//SetFPSCR_FR(Call(GetType<bool>(), m_pure_attr, "__fmadds_get_fr", a, b, c)); // TODO ??? //SetFPSCR_FR(Call(GetType<bool>(), m_pure_attr, "__fmadds_get_fr", a, b, c)); // TODO ???