amd64: Spell amd64 as AMD64 in macro names.
[libfirm] / win32 / math.c
1 #include "ieee754.h"
2 #include "config.h"
3
4 static int __isnan(double d)
5 {
6   union ieee754_double f;
7
8   f.d = d;
9   if (f.ieee.exponent == 0x7FF &&
10     (f.ieee.mantissa0 != 0 ||
11      f.ieee.mantissa1 != 0))
12     return 1;
13
14   return 0;
15 }
16
17 static int __isnanl(long double d)
18 {
19   union ieee854_long_double f;
20
21   f.d = d;
22   if (f.ieee_nan.exponent == 0x7FFF &&
23     (f.ieee_nan.quiet_nan ||
24     f.ieee_nan.mantissa1 ||
25     f.ieee_nan.mantissa0))
26     return 1;
27   return 0;
28 }
29
30 static int __isinf(double d)
31 {
32   union ieee754_double f;
33
34   f.d = d;
35   if (f.ieee.exponent == 0x7FF &&
36     f.ieee.mantissa0 == 0 &&
37     f.ieee.mantissa1 == 0)
38     return 1;
39
40   return 0;
41 }
42
43 static int __isinfl(long double d)
44 {
45   union ieee854_long_double f;
46
47   f.d = d;
48   if (f.ieee.exponent == 0x7FFF &&
49       f.ieee_nan.mantissa1 == 0x80000000 &&
50       f.ieee_nan.mantissa0 == 0)
51     return 1;
52
53   return 0;
54 }
55
56 #ifdef HAVE_LONG_DOUBLE
57 int isnan(long double d)
58 {
59   return __isnanl(d);
60 }
61
62 int isinf(long double d)
63 {
64   return __isinfl(d);
65 }
66
67 #else
68 int isnan(double d)
69 {
70   return __isnan(d);
71 }
72
73 int isinf(double d)
74 {
75   return __isinf(d);
76 }
77 #endif /* HAVE_LONG_DOUBLE */