new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__acosf128 (_Float128 x)
+{
+ if (__builtin_expect (isgreater (fabsf128 (x), 1), 0))
+ {
+ /* acos(|x|>1) */
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+
+ return __ieee754_acosf128 (x);
+}
+weak_alias (__acosf128, acosf128)
new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+_Float128
+__acoshf128 (_Float128 x)
+{
+ if (__builtin_expect (isless (x, 1), 0))
+ {
+ /* acosh(x<1) */
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+
+ return __ieee754_acoshf128 (x);
+}
+weak_alias (__acoshf128, acoshf128)
new file mode 100644
@@ -0,0 +1,37 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper asinf128 */
+_Float128
+__asinf128 (_Float128 x)
+{
+ if (__builtin_expect (isgreater (fabsf128 (x), 1), 0))
+ {
+ /* asin(|x|>1) */
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+
+ return __ieee754_asinf128 (x);
+}
+weak_alias (__asinf128, asinf128)
new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * wrapper atan2f128(y,x)
+ */
+
+#include <errno.h>
+#include <math.h>
+#include <math_private.h>
+
+
+_Float128
+__atan2f128 (_Float128 y, _Float128 x)
+{
+ _Float128 z = __ieee754_atan2f128 (y, x);
+ if (__glibc_unlikely (z == 0 && y != 0 && isfinite (x)))
+ __set_errno (ERANGE);
+ return z;
+}
+weak_alias (__atan2f128, atan2f128)
new file mode 100644
@@ -0,0 +1,40 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+/* wrapper atanhf128 */
+_Float128
+__atanhf128 (_Float128 x)
+{
+ _Float128 fabs_x = fabsf128 (x);
+ if (__builtin_expect (isgreaterequal (fabs_x, 1), 0))
+ {
+ if (fabs_x > 1)
+ {
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+ __set_errno (ERANGE);
+ return x / zero;
+ }
+ return __ieee754_atanhf128 (x);
+}
+weak_alias (__atanhf128, atanhf128)
new file mode 100644
@@ -0,0 +1,33 @@
+/* w_acoshf128.c -- _Float128 version of w_acosh.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper coshf128(x)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__coshf128 (_Float128 x)
+{
+ _Float128 z = __ieee754_coshf128 (x);
+ if (__builtin_expect (!isfinite (z), 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return HUGE_VAL_F128;
+ }
+ return z;
+}
+weak_alias (__coshf128, coshf128)
new file mode 100644
@@ -0,0 +1,38 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+
+/*
+ * wrapper exp10f128(x)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__exp10f128 (_Float128 x)
+{
+ _Float128 z = __ieee754_exp10f128 (x);
+ if (__builtin_expect (!isfinite (z) || z == 0, 0) && isfinite (x))
+ {
+ /* exp10f128 overflow if x > 0, underflow if x < 0. */
+ __set_errno (ERANGE);
+ return signbit (x) == 0 ? HUGE_VAL_F128 : 0;
+ }
+ return z;
+}
+weak_alias (__exp10f128, exp10f128)
new file mode 100644
@@ -0,0 +1,36 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * wrapper exp2f128(x)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__exp2f128 (_Float128 x)
+{
+ _Float128 z = __ieee754_exp2f128 (x);
+ if (__builtin_expect (!isfinite (z) || z == 0, 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return signbit (x) == 0 ? HUGE_VAL_F128 : 0;
+ }
+ return z;
+}
+weak_alias (__exp2f128, exp2f128)
new file mode 100644
@@ -0,0 +1,34 @@
+/* w_expf128.c -- _Float128 version of w_exp.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper expf128(x)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__expf128(_Float128 x)
+{
+ _Float128 z = __ieee754_expf128 (x);
+ if (__glibc_unlikely (!isfinite (z) || z == 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return signbit (x) == 0 ? HUGE_VAL_F128 : 0;
+ }
+ return z;
+}
+hidden_def (__expf128)
+weak_alias (__expf128, expf128)
new file mode 100644
@@ -0,0 +1,37 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+/* wrapper fmodf128 */
+_Float128
+__fmodf128 (_Float128 x, _Float128 y)
+{
+ if (__builtin_expect (isinf (x) || y == 0, 0)
+ && !isnan (y) && !isnan (x))
+ {
+ /* fmod(+-Inf,y) or fmod(x,0) */
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+
+ return __ieee754_fmodf128 (x, y);
+}
+weak_alias (__fmodf128, fmodf128)
new file mode 100644
@@ -0,0 +1,34 @@
+/* w_hypotf128.c -- _Float128 version of w_hypot.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper hypotf128(x,y)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__hypotf128(_Float128 x, _Float128 y)
+{
+ _Float128 z;
+ z = __ieee754_hypotf128 (x,y);
+ if(__builtin_expect (!isfinite (z), 0) && isfinite (x) && isfinite (y))
+ {
+ __set_errno (ERANGE);
+ return HUGE_VAL_F128;
+ }
+ return z;
+}
+weak_alias (__hypotf128, hypotf128)
new file mode 100644
@@ -0,0 +1,38 @@
+/* Copyright (C) 2012-2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Adhemerval Zanella <azanella@linux.vnet.ibm.com>, 2011.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <errno.h>
+#include <limits.h>
+#include <math_private.h>
+
+/* wrapper ilogbf128 */
+int
+__ilogbf128 (_Float128 x)
+{
+ int r = __ieee754_ilogbf128 (x);
+ if (__builtin_expect (r == FP_ILOGB0, 0)
+ || __builtin_expect (r == FP_ILOGBNAN, 0)
+ || __builtin_expect (r == INT_MAX, 0))
+ {
+ __set_errno (EDOM);
+ feraiseexcept (FE_INVALID);
+ }
+ return r;
+}
+weak_alias (__ilogbf128, ilogbf128)
new file mode 100644
@@ -0,0 +1,56 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper j0f128 */
+_Float128
+__j0f128 (_Float128 x)
+{
+ return __ieee754_j0f128 (x);
+}
+weak_alias (__j0f128, j0f128)
+
+
+/* wrapper y0f128 */
+_Float128
+__y0f128 (_Float128 x)
+{
+ if (__builtin_expect (islessequal (x, 0) || isgreater (x, X_TLOSS), 0))
+ {
+ if (x < 0)
+ {
+ /* d = zero/(x-x) */
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+ else if (x == 0)
+ {
+ /* d = -one/(x-x) */
+ feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -HUGE_VAL_F128;
+ }
+ }
+
+ return __ieee754_y0f128 (x);
+}
+weak_alias (__y0f128, y0f128)
new file mode 100644
@@ -0,0 +1,55 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper j1f128 */
+_Float128
+__j1f128 (_Float128 x)
+{
+ return __ieee754_j1f128 (x);
+}
+weak_alias (__j1f128, j1f128)
+
+
+/* wrapper y1f128 */
+_Float128
+__y1f128 (_Float128 x)
+{
+ if (__builtin_expect (islessequal (x, 0) || isgreater (x, X_TLOSS), 0))
+ {
+ if (x < 0)
+ {
+ /* d = zero/(x-x) */
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+ else if (x == 0)
+ {
+ /* d = -one/(x-x) */
+ feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -HUGE_VAL_F128;
+ }
+ }
+ return __ieee754_y1f128 (x);
+}
+weak_alias (__y1f128, y1f128)
new file mode 100644
@@ -0,0 +1,75 @@
+/* w_jnf128.c -- _Float128 version of w_jn.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper jn(int n, _Float128 x), yn(int n, _Float128 x)
+ * floating point Bessel's function of the 1st and 2nd kind
+ * of order n
+ *
+ * Special cases:
+ * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal;
+ * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal.
+ * Note 2. About jn(n,x), yn(n,x)
+ * For n=0, j0(x) is called,
+ * for n=1, j1(x) is called,
+ * for n<x, forward recursion us used starting
+ * from values of j0(x) and j1(x).
+ * for n>x, a continued fraction approximation to
+ * j(n,x)/j(n-1,x) is evaluated and then backward
+ * recursion is used starting from a supposed value
+ * for j(n,x). The resulting value of j(0,x) is
+ * compared with the actual value to correct the
+ * supposed value of j(n,x).
+ *
+ * yn(n,x) is similar in all respects, except
+ * that forward recursion is used for all
+ * values of n>1.
+ *
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__jnf128 (int n, _Float128 x)
+{
+ return __ieee754_jnf128 (n, x);
+}
+weak_alias (__jnf128, jnf128)
+
+_Float128
+__ynf128 (int n, _Float128 x) /* wrapper ynf128 */
+{
+ _Float128 z = __ieee754_ynf128 (n, x);
+ if (isnan (x))
+ return z;
+
+ if (x <= 0)
+ {
+ if (x == 0)
+ {
+ /* d= -one/(x-x); */
+ __set_errno (ERANGE);
+ return n < 0 && (n & 1) != 0 ? HUGE_VAL_F128 : -HUGE_VAL_F128;
+ }
+ else
+ {
+ /* d = zero/(x-x); */
+ __set_errno (EDOM);
+ return NAN;
+ }
+ }
+ return z;
+}
+weak_alias (__ynf128, ynf128)
new file mode 100644
@@ -0,0 +1,34 @@
+/* w_lgammaf128.c -- _Float128 version of w_lgamma.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper _Float128 lgammaf128(_Float128 x, int *signgamp)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__lgammaf128 (_Float128 x)
+{
+ _Float128 y = __ieee754_lgammaf128_r (x, &__signgam);
+ if (__builtin_expect( !isfinite (y), 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return HUGE_VAL_F128;
+ }
+ return y;
+}
+
+weak_alias (__lgammaf128, lgammaf128)
new file mode 100644
@@ -0,0 +1,34 @@
+/* w_lgammaf128_r.c -- _Float128 version of w_lgamma_r.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper _Float128 lgammaf128_r(_Float128 x, int *signgamp)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+
+_Float128
+__lgammaf128_r(_Float128 x, int *signgamp)
+{
+ _Float128 y = __ieee754_lgammaf128_r (x, signgamp);
+ if (__builtin_expect (!isfinite (y), 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return HUGE_VAL_F128;
+ }
+ return y;
+}
+weak_alias (__lgammaf128_r, lgammaf128_r)
new file mode 100644
@@ -0,0 +1,44 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper log10f128(x) */
+_Float128
+__log10f128 (_Float128 x)
+{
+ if (__builtin_expect (islessequal (x, 0), 0))
+ {
+ if (x == 0)
+ {
+ feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -HUGE_VAL_F128;
+ }
+ else
+ {
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+ }
+ return __ieee754_log10f128 (x);
+}
+weak_alias (__log10f128, log10f128)
new file mode 100644
@@ -0,0 +1,36 @@
+/* Wrapper for __log1pf128 that handles setting errno.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__w_log1pf128 (_Float128 x)
+{
+ if (__glibc_unlikely (islessequal (x, -1)))
+ {
+ if (x == -1)
+ __set_errno (ERANGE);
+ else
+ __set_errno (EDOM);
+ }
+
+ return __log1pf128 (x);
+}
+weak_alias (__w_log1pf128, log1pf128)
new file mode 100644
@@ -0,0 +1,44 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper log2f128(x) */
+_Float128
+__log2f128 (_Float128 x)
+{
+ if (__builtin_expect (islessequal (x, 0), 0))
+ {
+ if (x == 0)
+ {
+ feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -HUGE_VAL_F128;
+ }
+ else
+ {
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+ }
+ return __ieee754_log2f128 (x);
+}
+weak_alias (__log2f128, log2f128)
new file mode 100644
@@ -0,0 +1,44 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <math.h>
+#include <math_private.h>
+
+
+/* wrapper logf128(x) */
+_Float128
+__logf128 (_Float128 x)
+{
+ if (__builtin_expect (islessequal (x, 0), 0))
+ {
+ if (x == 0)
+ {
+ feraiseexcept (FE_DIVBYZERO);
+ __set_errno (ERANGE);
+ return -HUGE_VAL_F128;
+ }
+ else
+ {
+ feraiseexcept (FE_INVALID);
+ __set_errno (EDOM);
+ return NAN;
+ }
+ }
+ return __ieee754_logf128 (x);
+}
+weak_alias (__logf128, logf128)
new file mode 100644
@@ -0,0 +1,86 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+/* wrapper powf128 */
+_Float128
+__powf128 (_Float128 x, _Float128 y)
+{
+ _Float128 z = __ieee754_powf128 (x, y);
+ if (__glibc_unlikely (!isfinite (z)))
+ {
+ if (isnan (x))
+ {
+ if (y == 0)
+ {
+ /* pow(NaN,0.0) */
+ return 1;
+ }
+ }
+ else if (isfinite (x) && isfinite (y))
+ {
+ if (isnan (z))
+ {
+ /* pow neg**non-int */
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+ else if (x == 0 && y < 0)
+ {
+ __set_errno (ERANGE);
+ return signbit (x) && signbit (z) ?
+ -HUGE_VAL_F128 : HUGE_VAL_F128;
+ }
+ else
+ {
+ /* pow overflow */
+ _Float128 retval = HUGE_VAL_F128;
+ y *= __f128 (0.5);
+ if (x < 0 && __rintf128 (y) != y)
+ retval = -HUGE_VAL_F128;
+ __set_errno (ERANGE);
+ return retval;
+ }
+ }
+ }
+ else if (__builtin_expect (z == 0, 0) && isfinite (x) && isfinite (y))
+ {
+ if (x == 0)
+ {
+ if (y == 0)
+ {
+ return 1;
+ }
+ }
+ else
+ {
+ /* pow underflow */
+ _Float128 retval = 0;
+ y *= __f128 (0.5);
+ if (x < 0 && __rintf128 (y) != y)
+ retval = __f128 (-0.0);
+ __set_errno (ERANGE);
+ return retval;
+ }
+ }
+ return z;
+}
+weak_alias (__powf128, powf128)
new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+/* wrapper remainderf128 */
+_Float128
+__remainderf128 (_Float128 x, _Float128 y)
+{
+ if (((__builtin_expect (y == 0, 0) && !isnan (x))
+ || (__builtin_expect (isinf (x), 0) && !isnan (y))))
+ {
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+ return __ieee754_remainderf128 (x, y);
+}
+weak_alias (__remainderf128, remainderf128)
new file mode 100644
@@ -0,0 +1 @@
+/* Not defined for _FloatN types. */
new file mode 100644
@@ -0,0 +1,36 @@
+/* Wrapper for __scalblnf128 handles setting errno.
+ Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__w_scalblnf128 (_Float128 x, long int n)
+{
+ if (!isfinite (x) || x == 0)
+ return x + x;
+
+ x = __scalblnf128 (x, n);
+
+ if (!isfinite (x) || x == 0)
+ __set_errno (ERANGE);
+
+ return x;
+}
+weak_alias (__w_scalblnf128, scalblnf128)
new file mode 100644
@@ -0,0 +1,35 @@
+/* w_sinhf128.c -- _Float128 version of w_sinh.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+ * wrapper sinhf128(x)
+ */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0.0;
+
+_Float128
+__sinhf128 (_Float128 x)
+{
+ _Float128 z = __ieee754_sinhf128 (x);
+ if (__builtin_expect (!isfinite (z), 0) && isfinite (x))
+ {
+ __set_errno (ERANGE);
+ return x > zero ? HUGE_VAL_F128 : -HUGE_VAL_F128;
+ }
+ return z;
+}
+weak_alias (__sinhf128, sinhf128)
new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+static _Float128 zero = 0;
+
+/* wrapper sqrtf128 */
+_Float128
+__sqrtf128 (_Float128 x)
+{
+ if (__builtin_expect (isless (x, 0), 0) && _LIB_VERSION != _IEEE_)
+ {
+ __set_errno (EDOM);
+ return zero / zero;
+ }
+
+ return __ieee754_sqrtf128 (x);
+}
+weak_alias (__sqrtf128, sqrtf128)
new file mode 100644
@@ -0,0 +1,54 @@
+/* w_tgammaf128.c -- _Float128 version of w_gamma.c.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+/* _Float128 gammaf128(_Float128 x)
+ * Return the Gamma function of x.
+ */
+
+#include <errno.h>
+#include <math.h>
+#include <math_private.h>
+
+_Float128
+__tgammaf128 (_Float128 x)
+{
+ int local_signgam;
+ _Float128 y = __ieee754_gammaf128_r (x, &local_signgam);
+
+ if (__glibc_unlikely (!isfinite (y) || y == 0)
+ && (isfinite (x) || (isinf (x) && x < 0)))
+ {
+ if (x == 0)
+ {
+ __set_errno (ERANGE);
+ return __copysignf128 (HUGE_VAL_F128, x);
+ }
+ else if (__floorf128 (x) == x && x < 0)
+ {
+ __set_errno (EDOM);
+ return NAN;
+ }
+ else if (y == 0)
+ {
+ __set_errno (ERANGE); /* tgamma underflow */
+ }
+ else
+ {
+ __set_errno (ERANGE);
+ return __copysignf128 (HUGE_VAL_F128, x);
+ }
+ }
+ return local_signgam < 0 ? - y : y;
+}
+weak_alias (__tgammaf128, tgammaf128)