X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=win32%2Fmath.c;h=9179f43a177405a9d321802301e293d1ed1dddab;hb=9f54772ec0d91e31b00cdb6094afe9a5c909aa61;hp=0a19dac8821d42a7fefa28e756fddffd9e77e33a;hpb=df327b05c5773ec9839d28fab562f8dc228560c6;p=libfirm diff --git a/win32/math.c b/win32/math.c index 0a19dac88..9179f43a1 100644 --- a/win32/math.c +++ b/win32/math.c @@ -1,11 +1,77 @@ -#include "fltcalc.h" +#include "ieee754.h" +#include "config.h" -int isnan(LLDBL v) +static int __isnan(double d) { + union ieee754_double f; + + f.d = d; + if (f.ieee.exponent == 0x7FF && + (f.ieee.mantissa0 != 0 || + f.ieee.mantissa1 != 0)) + return 1; + + return 0; +} + +static int __isnanl(long double d) +{ + union ieee854_long_double f; + + f.d = d; + if (f.ieee_nan.exponent == 0x7FFF && + (f.ieee_nan.quiet_nan || + f.ieee_nan.mantissa1 || + f.ieee_nan.mantissa0)) + return 1; return 0; } -int isinf(LLDBL v) +static int __isinf(double d) { + union ieee754_double f; + + f.d = d; + if (f.ieee.exponent == 0x7FF && + f.ieee.mantissa0 == 0 && + f.ieee.mantissa1 == 0) + return 1; + return 0; } + +static int __isinfl(long double d) +{ + union ieee854_long_double f; + + f.d = d; + if (f.ieee.exponent == 0x7FFF && + f.ieee_nan.mantissa1 == 0x80000000 && + f.ieee_nan.mantissa0 == 0) + return 1; + + return 0; +} + +#ifdef HAVE_LONG_DOUBLE +int isnan(long double d) +{ + return __isnanl(d); +} + +int isinf(long double d) +{ + return __isinfl(d); +} + +#else +int isnan(double d) +{ + return __isnan(d); +} + +int isinf(double d) +{ + return __isinf(d); +} +#endif /* HAVE_LONG_DOUBLE */