Permalink
Browse files

Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_div is …

…a signaling NaN

If either operand is a signaling NaN, we need to signify that by setting
the VXSNAN bit.

This fixes NaN flag setting for fdiv, fdivs and ps_div instructions.
  • Loading branch information...
lioncash committed May 27, 2018
1 parent e9ce75c commit f4c5ceba1cf9622f421338a1a00a6565753ff54e
Showing with 8 additions and 1 deletion.
  1. +8 −1 Source/Core/Core/PowerPC/Interpreter/Interpreter_FPUtils.h
@@ -113,13 +113,18 @@ inline double NI_mul(double a, double b)
inline double NI_div(double a, double b)
{
double t = a / b;
const double t = a / b;
if (std::isnan(t))
{
if (Common::IsSNAN(a) || Common::IsSNAN(b))
SetFPException(FPSCR_VXSNAN);
if (std::isnan(a))
return MakeQuiet(a);
if (std::isnan(b))
return MakeQuiet(b);
if (b == 0.0)
{
SetFPException(FPSCR_ZX);
@@ -130,8 +135,10 @@ inline double NI_div(double a, double b)
{
SetFPException(FPSCR_VXIDI);
}
return PPC_NAN;
}
return t;
}

0 comments on commit f4c5ceb

Please sign in to comment.