#include "xmmLibm_prefix.h"
#include "math.h"
#if defined(BUILDING_FOR_CARBONCORE_LEGACY)
double __inf ( void )
{
return __builtin_inf();
}
#else
unsigned int __math_errhandling ( void )
{
return (MATH_ERREXCEPT); }
int __isfinited( double x )
{
x = __builtin_fabs(x);
return x < __builtin_inf();
}
int __isfinitef( float x )
{
x = __builtin_fabsf(x);
return x < __builtin_inff();
}
int __isfinite( long double x )
{
x = __builtin_fabsl(x);
return x < __builtin_infl();
}
int finite( double x )
{
return __isfinited( x );
}
int __isinfd( double x )
{
x = __builtin_fabs(x);
return x == __builtin_inf();
}
int __isinff( float x )
{
x = __builtin_fabsf(x);
return x == __builtin_inff();
}
int __isinf( long double x )
{
x = __builtin_fabsl(x);
return x == __builtin_infl();
}
int __isnand( double x )
{
return x != x;
}
int __isnanf( float x )
{
return x != x;
}
int __isnan( long double x )
{
return x != x;
}
int __isnormald( double x )
{
x = __builtin_fabs(x);
return 0x1.0p-1022 <= x && x < __builtin_inf();
}
int __isnormalf( float x )
{
x = __builtin_fabsf(x);
return 0x1.0p-126f <= x && x < __builtin_inff();
}
int __isnormal( long double x )
{
x = __builtin_fabsl(x);
return 0x1.0p-16382L <= x && x < __builtin_infl();
}
int __signbitd( double x )
{
xDouble xx = DOUBLE_2_XDOUBLE(x);
return 1 & _mm_movemask_pd( xx );
}
int __signbitf( float x )
{
xFloat xx = FLOAT_2_XFLOAT(x);
return 1 & _mm_movemask_ps( xx );
}
int __signbitl( long double x )
{
union
{
long double ld;
struct
{
uint64_t mantissa;
uint16_t sexp __attribute__ ((packed));
}parts;
}u={x};
return u.parts.sexp >> 15;
}
int __fpclassifyd( double x )
{
x = __builtin_fabs(x);
if( EXPECT_FALSE( x == 0.0 ) )
return FP_ZERO;
if( EXPECT_FALSE( x < 0x1.0p-1022 ) )
return FP_SUBNORMAL;
if( EXPECT_TRUE( x < __builtin_inf() ) )
return FP_NORMAL;
if( EXPECT_TRUE( x == __builtin_inf() ) )
return FP_INFINITE;
return FP_NAN;
}
int __fpclassifyf( float x )
{
x = __builtin_fabs(x);
if( EXPECT_FALSE( x == 0.0f ) )
return FP_ZERO;
if( EXPECT_FALSE( x < 0x1.0p-126f ) )
return FP_SUBNORMAL;
if( EXPECT_TRUE( x < __builtin_inff() ) )
return FP_NORMAL;
if( EXPECT_TRUE( x == __builtin_inff() ) )
return FP_INFINITE;
return FP_NAN;
}
int __fpclassify( long double x )
{
x = __builtin_fabsl(x);
if( EXPECT_FALSE( x == 0.0L ) )
return FP_ZERO;
if( EXPECT_FALSE( x < 0x1.0p-16382L ) )
return FP_SUBNORMAL;
if( EXPECT_TRUE( x < __builtin_infl() ) )
return FP_NORMAL;
if( EXPECT_TRUE( x == __builtin_infl() ) )
return FP_INFINITE;
return FP_NAN;
}
float __inff( void )
{
return __builtin_inff();
}
long double __infl( void )
{
return __builtin_infl();
}
float __nan( void )
{
return __builtin_nan("");
}
#endif