Interpreter_FloatingPoint: Handle QNaNs properly in frsp

Essentially the same behavior as the SNaN path, minus the conditional result and setting of the VXSNAN FPSCR bit.
This commit is contained in:
Lioncash 2018-04-12 02:51:37 -04:00
parent 965b963a6f
commit a36bf438cd
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7

View File

@ -275,11 +275,14 @@ void Interpreter::frspx(UGeckoInstruction inst) // round to single
const double b = rPS0(inst.FB);
const double rounded = ForceSingle(b);
if (MathUtil::IsSNAN(b))
if (std::isnan(b))
{
SetFPException(FPSCR_VXSNAN);
const bool is_snan = MathUtil::IsSNAN(b);
if (FPSCR.VE == 0)
if (is_snan)
SetFPException(FPSCR_VXSNAN);
if (!is_snan || FPSCR.VE == 0)
{
rPS0(inst.FD) = rounded;
rPS1(inst.FD) = rounded;