summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/internal/libm.h14
-rw-r--r--src/math/acoshl.c6
-rw-r--r--src/math/asinhl.c6
-rw-r--r--src/math/atanhl.c2
-rw-r--r--src/math/coshl.c6
-rw-r--r--src/math/erfl.c10
-rw-r--r--src/math/expl.c6
-rw-r--r--src/math/expm1l.c6
-rw-r--r--src/math/lgammal.c10
-rw-r--r--src/math/log10l.c6
-rw-r--r--src/math/log1pl.c6
-rw-r--r--src/math/log2l.c6
-rw-r--r--src/math/logl.c6
-rw-r--r--src/math/powl.c7
-rw-r--r--src/math/sinhl.c6
-rw-r--r--src/math/tanhl.c6
-rw-r--r--src/math/tgammal.c6
17 files changed, 111 insertions, 4 deletions
diff --git a/src/internal/libm.h b/src/internal/libm.h
index 88a7eb47..df864111 100644
--- a/src/internal/libm.h
+++ b/src/internal/libm.h
@@ -42,6 +42,20 @@ union ldshape {
uint64_t hi;
} i2;
};
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384 && __BYTE_ORDER == __BIG_ENDIAN
+union ldshape {
+ long double f;
+ struct {
+ uint16_t se;
+ uint16_t top;
+ uint32_t mid;
+ uint64_t lo;
+ } i;
+ struct {
+ uint64_t hi;
+ uint64_t lo;
+ } i2;
+};
#else
#error Unsupported long double representation
#endif
diff --git a/src/math/acoshl.c b/src/math/acoshl.c
index 4aa84acb..8d4b43f6 100644
--- a/src/math/acoshl.c
+++ b/src/math/acoshl.c
@@ -20,4 +20,10 @@ long double acoshl(long double x)
return logl(2*x - 1/(x+sqrtl(x*x-1)));
return logl(x) + 0.693147180559945309417232121458176568L;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double acoshl(long double x)
+{
+ return acosh(x);
+}
#endif
diff --git a/src/math/asinhl.c b/src/math/asinhl.c
index e5f31751..8635f52e 100644
--- a/src/math/asinhl.c
+++ b/src/math/asinhl.c
@@ -32,4 +32,10 @@ long double asinhl(long double x)
}
return s ? -x : x;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double asinhl(long double x)
+{
+ return asinh(x);
+}
#endif
diff --git a/src/math/atanhl.c b/src/math/atanhl.c
index f63d60b1..87cd1cdb 100644
--- a/src/math/atanhl.c
+++ b/src/math/atanhl.c
@@ -5,7 +5,7 @@ long double atanhl(long double x)
{
return atanh(x);
}
-#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384
+#elif (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384
/* atanh(x) = log((1+x)/(1-x))/2 = log1p(2x/(1-x))/2 ~= x + x^3/3 + o(x^5) */
long double atanhl(long double x)
{
diff --git a/src/math/coshl.c b/src/math/coshl.c
index 080e5eb0..06a56fe3 100644
--- a/src/math/coshl.c
+++ b/src/math/coshl.c
@@ -38,4 +38,10 @@ long double coshl(long double x)
t = expl(0.5*x);
return 0.5*t*t;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double coshl(long double x)
+{
+ return cosh(x);
+}
#endif
diff --git a/src/math/erfl.c b/src/math/erfl.c
index 96b74dee..e267c231 100644
--- a/src/math/erfl.c
+++ b/src/math/erfl.c
@@ -340,4 +340,14 @@ long double erfcl(long double x)
y = 0x1p-16382L;
return sign ? 2 - y : y*y;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double erfl(long double x)
+{
+ return erf(x);
+}
+long double erfcl(long double x)
+{
+ return erfc(x);
+}
#endif
diff --git a/src/math/expl.c b/src/math/expl.c
index b62980fa..0a7f44f6 100644
--- a/src/math/expl.c
+++ b/src/math/expl.c
@@ -119,4 +119,10 @@ long double expl(long double x)
x = 1.0 + 2.0 * x;
return scalbnl(x, k);
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double expl(long double x)
+{
+ return exp(x);
+}
#endif
diff --git a/src/math/expm1l.c b/src/math/expm1l.c
index 21a86c00..d1715078 100644
--- a/src/math/expm1l.c
+++ b/src/math/expm1l.c
@@ -114,4 +114,10 @@ long double expm1l(long double x)
x = px * qx + (px - 1.0);
return x;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double expm1l(long double x)
+{
+ return expm1(x);
+}
#endif
diff --git a/src/math/lgammal.c b/src/math/lgammal.c
index 55ec5325..2b354a7c 100644
--- a/src/math/lgammal.c
+++ b/src/math/lgammal.c
@@ -340,9 +340,16 @@ long double __lgammal_r(long double x, int *sg) {
r = nadj - r;
return r;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+double __lgamma_r(double x, int *sg);
+
+long double __lgammal_r(long double x, int *sg)
+{
+ return __lgamma_r(x, sg);
+}
#endif
-#if (LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024) || (LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384)
extern int __signgam;
long double lgammal(long double x)
@@ -351,4 +358,3 @@ long double lgammal(long double x)
}
weak_alias(__lgammal_r, lgammal_r);
-#endif
diff --git a/src/math/log10l.c b/src/math/log10l.c
index c7aacf90..63dcc286 100644
--- a/src/math/log10l.c
+++ b/src/math/log10l.c
@@ -182,4 +182,10 @@ done:
z += e * (L102A);
return z;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double log10l(long double x)
+{
+ return log10(x);
+}
#endif
diff --git a/src/math/log1pl.c b/src/math/log1pl.c
index 37da46d2..141b5f0b 100644
--- a/src/math/log1pl.c
+++ b/src/math/log1pl.c
@@ -168,4 +168,10 @@ long double log1pl(long double xm1)
z = z + e * C1;
return z;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double log1pl(long double x)
+{
+ return log1p(x);
+}
#endif
diff --git a/src/math/log2l.c b/src/math/log2l.c
index d00531d5..722b451a 100644
--- a/src/math/log2l.c
+++ b/src/math/log2l.c
@@ -173,4 +173,10 @@ done:
z += e;
return z;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double log2l(long double x)
+{
+ return log2(x);
+}
#endif
diff --git a/src/math/logl.c b/src/math/logl.c
index 03c5188f..5d536592 100644
--- a/src/math/logl.c
+++ b/src/math/logl.c
@@ -166,4 +166,10 @@ long double logl(long double x)
z = z + e * C1; /* This sum has an error of 1/2 lsb. */
return z;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double logl(long double x)
+{
+ return log(x);
+}
#endif
diff --git a/src/math/powl.c b/src/math/powl.c
index ce6274cf..a765706d 100644
--- a/src/math/powl.c
+++ b/src/math/powl.c
@@ -513,5 +513,10 @@ static long double powil(long double x, int nn)
y = 1.0/y;
return y;
}
-
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double powl(long double x, long double y)
+{
+ return pow(x, y);
+}
#endif
diff --git a/src/math/sinhl.c b/src/math/sinhl.c
index 4864ddfa..b305d4d2 100644
--- a/src/math/sinhl.c
+++ b/src/math/sinhl.c
@@ -34,4 +34,10 @@ long double sinhl(long double x)
t = expl(0.5*absx);
return h*t*t;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double sinhl(long double x)
+{
+ return sinh(x);
+}
#endif
diff --git a/src/math/tanhl.c b/src/math/tanhl.c
index f594b85f..4e1aa9f8 100644
--- a/src/math/tanhl.c
+++ b/src/math/tanhl.c
@@ -39,4 +39,10 @@ long double tanhl(long double x)
}
return sign ? -t : t;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double tanhl(long double x)
+{
+ return tanh(x);
+}
#endif
diff --git a/src/math/tgammal.c b/src/math/tgammal.c
index 5c1a02a6..5336c5b1 100644
--- a/src/math/tgammal.c
+++ b/src/math/tgammal.c
@@ -272,4 +272,10 @@ small:
q = z / (x * __polevll(x, S, 8));
return q;
}
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+// TODO: broken implementation to make things compile
+long double tgammal(long double x)
+{
+ return tgamma(x);
+}
#endif