Jit: Use infinity and NaN from numeric_limits.

MSVC's implementation of INFINITY is unusable.
This commit is contained in:
magumagu 2014-05-22 19:20:43 -07:00
parent a9a2d3d98d
commit d0ed3b8192
1 changed files with 12 additions and 4 deletions

View File

@ -4,6 +4,8 @@
#pragma once
#include <limits>
#include "Common/CPUDetect.h"
#include "Common/MathUtil.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
@ -307,7 +309,8 @@ inline double ApproximateReciprocal(double val)
// Special case 0
if (mantissa == 0 && exponent == 0)
return sign ? -INFINITY : INFINITY;
return sign ? -std::numeric_limits<double>::infinity() :
std::numeric_limits<double>::infinity();
// Special case NaN-ish numbers
if (exponent == (0x7FFLL << 52))
{
@ -364,17 +367,22 @@ inline double ApproximateReciprocalSquareRoot(double val)
// Special case 0
if (mantissa == 0 && exponent == 0)
return sign ? -INFINITY : INFINITY;
return sign ? -std::numeric_limits<double>::infinity() :
std::numeric_limits<double>::infinity();
// Special case NaN-ish numbers
if (exponent == (0x7FFLL << 52))
{
if (mantissa == 0)
return sign ? NAN : 0.0;
{
if (sign)
return std::numeric_limits<double>::quiet_NaN();
return 0.0;
}
return 0.0 + valf;
}
// Negative numbers return NaN
if (sign)
return NAN;
return std::numeric_limits<double>::quiet_NaN();
if (!exponent)
{