mirror of
git://git.musl-libc.org/musl
synced 2025-01-18 21:01:01 +00:00
math: add dummy implementations of 128 bit long double functions
This is in preparation for the aarch64 port only to have the long double math symbols available on ld128 platforms. The implementations should be fixed up later once we have proper tests for these functions. Added bigendian handling for ld128 bit manipulations too.
This commit is contained in:
parent
53cfe0c61a
commit
f4e4632abf
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user