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