| OLD | NEW |
| 1 #include "libm.h" | 1 #include "libm.h" |
| 2 | 2 |
| 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 | 3 #if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 |
| 4 int __fpclassifyl(long double x) | 4 int __fpclassifyl(long double x) { |
| 5 { | 5 return __fpclassify(x); |
| 6 » return __fpclassify(x); | |
| 7 } | 6 } |
| 8 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 | 7 #elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 |
| 9 int __fpclassifyl(long double x) | 8 int __fpclassifyl(long double x) { |
| 10 { | 9 union ldshape u = {x}; |
| 11 » union ldshape u = {x}; | 10 int e = u.i.se & 0x7fff; |
| 12 » int e = u.i.se & 0x7fff; | 11 int msb = u.i.m >> 63; |
| 13 » int msb = u.i.m>>63; | 12 if (!e && !msb) |
| 14 » if (!e && !msb) | 13 return u.i.m ? FP_SUBNORMAL : FP_ZERO; |
| 15 » » return u.i.m ? FP_SUBNORMAL : FP_ZERO; | 14 if (!msb) |
| 16 » if (!msb) | 15 return FP_NAN; |
| 17 » » return FP_NAN; | 16 if (e == 0x7fff) |
| 18 » if (e == 0x7fff) | 17 return u.i.m << 1 ? FP_NAN : FP_INFINITE; |
| 19 » » return u.i.m << 1 ? FP_NAN : FP_INFINITE; | 18 return FP_NORMAL; |
| 20 » return FP_NORMAL; | |
| 21 } | 19 } |
| 22 #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 | 20 #elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 |
| 23 int __fpclassifyl(long double x) | 21 int __fpclassifyl(long double x) { |
| 24 { | 22 union ldshape u = {x}; |
| 25 » union ldshape u = {x}; | 23 int e = u.i.se & 0x7fff; |
| 26 » int e = u.i.se & 0x7fff; | 24 u.i.se = 0; |
| 27 » u.i.se = 0; | 25 if (!e) |
| 28 » if (!e) | 26 return u.i2.lo | u.i2.hi ? FP_SUBNORMAL : FP_ZERO; |
| 29 » » return u.i2.lo | u.i2.hi ? FP_SUBNORMAL : FP_ZERO; | 27 if (e == 0x7fff) |
| 30 » if (e == 0x7fff) | 28 return u.i2.lo | u.i2.hi ? FP_NAN : FP_INFINITE; |
| 31 » » return u.i2.lo | u.i2.hi ? FP_NAN : FP_INFINITE; | 29 return FP_NORMAL; |
| 32 » return FP_NORMAL; | |
| 33 } | 30 } |
| 34 #endif | 31 #endif |
| OLD | NEW |