Permalink
Browse files

FloatUtils: Remove using namespace std in ApproximateReciprocal()

This was made quite a long time ago when we supported 32-bit ARM targets
  • Loading branch information...
lioncash committed May 9, 2018
1 parent 5cd02f0 commit 46a4243d9a724f100aaeb2011dbda2a5e222f6ae
Showing with 4 additions and 10 deletions.
  1. +4 −10 Source/Core/Common/FloatUtils.cpp
@@ -167,12 +167,6 @@ const std::array<BaseAndDec, 32> fres_expected = {{
// Used by fres and ps_res.
double ApproximateReciprocal(double val)
{
// We are using namespace std scoped here because the Android NDK is complete trash as usual
// For 32bit targets(mips, ARMv7, x86) it doesn't provide an implementation of std::copysign
// but instead provides just global namespace copysign implementations.
// The workaround for this is to just use namespace std within this function's scope
// That way on real toolchains it will use the std:: variant like normal.
using namespace std;
union
{
double valf;
@@ -186,23 +180,23 @@ double ApproximateReciprocal(double val)
// Special case 0
if (mantissa == 0 && exponent == 0)
return copysign(std::numeric_limits<double>::infinity(), valf);
return std::copysign(std::numeric_limits<double>::infinity(), valf);
// Special case NaN-ish numbers
if (exponent == (0x7FFLL << 52))
{
if (mantissa == 0)
return copysign(0.0, valf);
return std::copysign(0.0, valf);
return 0.0 + valf;
}
// Special case small inputs
if (exponent < (895LL << 52))
return copysign(std::numeric_limits<float>::max(), valf);
return std::copysign(std::numeric_limits<float>::max(), valf);
// Special case large inputs
if (exponent >= (1149LL << 52))
return copysign(0.0, valf);
return std::copysign(0.0, valf);
exponent = (0x7FDLL << 52) - exponent;

0 comments on commit 46a4243

Please sign in to comment.