From 9a310c312e63f227820611e87d841136d666a149 Mon Sep 17 00:00:00 2001 From: Andrew Church Date: Sun, 18 Jan 2015 07:05:38 +0900 Subject: [PATCH] Fix intermediate truncation in vector FP fused multiply-add. --- rpcs3/Emu/Cell/PPUInterpreter.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUInterpreter.h b/rpcs3/Emu/Cell/PPUInterpreter.h index ed235ed14d..ecf0f5f4c5 100644 --- a/rpcs3/Emu/Cell/PPUInterpreter.h +++ b/rpcs3/Emu/Cell/PPUInterpreter.h @@ -865,7 +865,7 @@ private: CPU.VPR[vd]._f[w] = (float)FPR_NAN; else { - CPU.VPR[vd]._f[w] = a * c + b; + CPU.VPR[vd]._f[w] = fmaf(a, c, b); if (std::isnan(CPU.VPR[vd]._f[w])) CPU.VPR[vd]._f[w] = (float)FPR_NAN; } @@ -1288,7 +1288,7 @@ private: CPU.VPR[vd]._f[w] = (float)FPR_NAN; else { - CPU.VPR[vd]._f[w] = -(a * c - b); + CPU.VPR[vd]._f[w] = -fmaf(a, c, -b); if (std::isnan(CPU.VPR[vd]._f[w])) CPU.VPR[vd]._f[w] = (float)FPR_NAN; }