Merge pull request #6977 from lioncash/add

Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_add() is a signaling NaN
This commit is contained in:
Léo Lam 2018-05-27 10:21:20 +02:00 committed by GitHub
commit e9ce75ccc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 1 deletions

View File

@ -137,16 +137,22 @@ inline double NI_div(double a, double b)
inline double NI_add(double a, double b) inline double NI_add(double a, double b)
{ {
double t = a + b; const double t = a + b;
if (std::isnan(t)) if (std::isnan(t))
{ {
if (Common::IsSNAN(a) || Common::IsSNAN(b))
SetFPException(FPSCR_VXSNAN);
if (std::isnan(a)) if (std::isnan(a))
return MakeQuiet(a); return MakeQuiet(a);
if (std::isnan(b)) if (std::isnan(b))
return MakeQuiet(b); return MakeQuiet(b);
SetFPException(FPSCR_VXISI); SetFPException(FPSCR_VXISI);
return PPC_NAN; return PPC_NAN;
} }
return t; return t;
} }