1#include "libm.h" 2 3#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 4int __fpclassifyl(long double x) { 5 return __fpclassify(x); 6} 7#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 8int __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 21int __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