Index: fusl/src/math/__fpclassifyl.c |
diff --git a/fusl/src/math/__fpclassifyl.c b/fusl/src/math/__fpclassifyl.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..481c0b949974ad43a59e95846bf9fb83ff5cbf23 |
--- /dev/null |
+++ b/fusl/src/math/__fpclassifyl.c |
@@ -0,0 +1,34 @@ |
+#include "libm.h" |
+ |
+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 |
+int __fpclassifyl(long double x) |
+{ |
+ return __fpclassify(x); |
+} |
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 |
+int __fpclassifyl(long double x) |
+{ |
+ union ldshape u = {x}; |
+ int e = u.i.se & 0x7fff; |
+ int msb = u.i.m>>63; |
+ if (!e && !msb) |
+ return u.i.m ? FP_SUBNORMAL : FP_ZERO; |
+ if (!msb) |
+ return FP_NAN; |
+ if (e == 0x7fff) |
+ return u.i.m << 1 ? FP_NAN : FP_INFINITE; |
+ return FP_NORMAL; |
+} |
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 |
+int __fpclassifyl(long double x) |
+{ |
+ union ldshape u = {x}; |
+ int e = u.i.se & 0x7fff; |
+ u.i.se = 0; |
+ if (!e) |
+ return u.i2.lo | u.i2.hi ? FP_SUBNORMAL : FP_ZERO; |
+ if (e == 0x7fff) |
+ return u.i2.lo | u.i2.hi ? FP_NAN : FP_INFINITE; |
+ return FP_NORMAL; |
+} |
+#endif |