aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/fpu
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/powerpc/fpu')
-rw-r--r--sysdeps/powerpc/fpu/Makefile7
-rw-r--r--sysdeps/powerpc/fpu/e_hypot.c134
-rw-r--r--sysdeps/powerpc/fpu/e_hypotf.c76
-rw-r--r--sysdeps/powerpc/fpu/e_rem_pio2f.c188
-rw-r--r--sysdeps/powerpc/fpu/e_sqrt.c175
-rw-r--r--sysdeps/powerpc/fpu/e_sqrtf.c150
-rw-r--r--sysdeps/powerpc/fpu/fclrexcpt.c49
-rw-r--r--sysdeps/powerpc/fpu/fe_mask.c32
-rw-r--r--sysdeps/powerpc/fpu/fe_nomask.c32
-rw-r--r--sysdeps/powerpc/fpu/fedisblxcpt.c57
-rw-r--r--sysdeps/powerpc/fpu/feenablxcpt.c58
-rw-r--r--sysdeps/powerpc/fpu/fegetenv.c38
-rw-r--r--sysdeps/powerpc/fpu/fegetexcept.c43
-rw-r--r--sysdeps/powerpc/fpu/fegetmode.c26
-rw-r--r--sysdeps/powerpc/fpu/fegetround.c30
-rw-r--r--sysdeps/powerpc/fpu/feholdexcpt.c51
-rw-r--r--sysdeps/powerpc/fpu/fenv_const.c36
-rw-r--r--sysdeps/powerpc/fpu/fenv_libc.h176
-rw-r--r--sysdeps/powerpc/fpu/fenv_private.h229
-rw-r--r--sysdeps/powerpc/fpu/fesetenv.c63
-rw-r--r--sysdeps/powerpc/fpu/fesetexcept.c42
-rw-r--r--sysdeps/powerpc/fpu/fesetmode.c49
-rw-r--r--sysdeps/powerpc/fpu/fesetround.c33
-rw-r--r--sysdeps/powerpc/fpu/feupdateenv.c68
-rw-r--r--sysdeps/powerpc/fpu/fgetexcptflg.c42
-rw-r--r--sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h28
-rw-r--r--sysdeps/powerpc/fpu/fraiseexcpt.c68
-rw-r--r--sysdeps/powerpc/fpu/fsetexcptflg.c63
-rw-r--r--sysdeps/powerpc/fpu/ftestexcept.c33
-rw-r--r--sysdeps/powerpc/fpu/k_cosf.c65
-rw-r--r--sysdeps/powerpc/fpu/k_rem_pio2f.c273
-rw-r--r--sysdeps/powerpc/fpu/k_sinf.c57
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps2342
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps-name1
-rw-r--r--sysdeps/powerpc/fpu/math_ldbl.h55
-rw-r--r--sysdeps/powerpc/fpu/math_private.h142
-rw-r--r--sysdeps/powerpc/fpu/s_cosf.c69
-rw-r--r--sysdeps/powerpc/fpu/s_fabs.S36
-rw-r--r--sysdeps/powerpc/fpu/s_fabsf.S1
-rw-r--r--sysdeps/powerpc/fpu/s_float_bitwise.h115
-rw-r--r--sysdeps/powerpc/fpu/s_fma.S32
-rw-r--r--sysdeps/powerpc/fpu/s_fmaf.S27
-rw-r--r--sysdeps/powerpc/fpu/s_isnan.c62
-rw-r--r--sysdeps/powerpc/fpu/s_isnanf.S1
-rw-r--r--sysdeps/powerpc/fpu/s_lrintf.S1
-rw-r--r--sysdeps/powerpc/fpu/s_rint.c46
-rw-r--r--sysdeps/powerpc/fpu/s_rintf.c42
-rw-r--r--sysdeps/powerpc/fpu/s_sinf.c69
-rw-r--r--sysdeps/powerpc/fpu/t_sqrt.c144
-rw-r--r--sysdeps/powerpc/fpu/tst-setcontext-fpscr.c370
50 files changed, 0 insertions, 6026 deletions
diff --git a/sysdeps/powerpc/fpu/Makefile b/sysdeps/powerpc/fpu/Makefile
deleted file mode 100644
index 53470a9cf2..0000000000
--- a/sysdeps/powerpc/fpu/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-ifeq ($(subdir),math)
-libm-support += fenv_const fe_nomask fe_mask t_sqrt
-endif
-
-ifeq ($(subdir),stdlib)
-tests += tst-setcontext-fpscr
-endif
diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c
deleted file mode 100644
index 2685ca6ba0..0000000000
--- a/sysdeps/powerpc/fpu/e_hypot.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Pythagorean addition using doubles
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-#include <math_private.h>
-#include <stdint.h>
-
-static const double two60 = 1.152921504606847e+18;
-static const double two500 = 3.2733906078961419e+150;
-static const double two600 = 4.149515568880993e+180;
-static const double two1022 = 4.49423283715579e+307;
-static const double twoM500 = 3.054936363499605e-151;
-static const double twoM600 = 2.4099198651028841e-181;
-static const double two60factor = 1.5592502418239997e+290;
-static const double pdnum = 2.225073858507201e-308;
-
-/* __ieee754_hypot(x,y)
- *
- * This a FP only version without any FP->INT conversion.
- * It is similar to default C version, making appropriates
- * overflow and underflows checks as well scaling when it
- * is needed.
- */
-
-#ifdef _ARCH_PWR7
-/* POWER7 isinf and isnan optimization are fast. */
-# define TEST_INF_NAN(x, y) \
- if ((isinf(x) || isinf(y)) \
- && !issignaling (x) && !issignaling (y)) \
- return INFINITY; \
- if (isnan(x) || isnan(y)) \
- return x + y;
-# else
-/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are
- * costly (especially for POWER6). */
-# define GET_TW0_HIGH_WORD(d1,d2,i1,i2) \
- do { \
- ieee_double_shape_type gh_u1; \
- ieee_double_shape_type gh_u2; \
- gh_u1.value = (d1); \
- gh_u2.value = (d2); \
- (i1) = gh_u1.parts.msw & 0x7fffffff; \
- (i2) = gh_u2.parts.msw & 0x7fffffff; \
- } while (0)
-
-# define TEST_INF_NAN(x, y) \
- do { \
- uint32_t hx, hy; \
- GET_TW0_HIGH_WORD(x, y, hx, hy); \
- if (hy > hx) { \
- uint32_t ht = hx; hx = hy; hy = ht; \
- } \
- if (hx >= 0x7ff00000) { \
- if ((hx == 0x7ff00000 || hy == 0x7ff00000) \
- && !issignaling (x) && !issignaling (y)) \
- return INFINITY; \
- return x + y; \
- } \
- } while (0)
-
-#endif
-
-
-double
-__ieee754_hypot (double x, double y)
-{
- x = fabs (x);
- y = fabs (y);
-
- TEST_INF_NAN (x, y);
-
- if (y > x)
- {
- double t = x;
- x = y;
- y = t;
- }
- if (y == 0.0)
- return x;
- /* if y is higher enough, y * 2^60 might overflow. The tests if
- y >= 1.7976931348623157e+308/2^60 (two60factor) and uses the
- appropriate check to avoid the overflow exception generation. */
- if (y > two60factor)
- {
- if ((x / y) > two60)
- return x + y;
- }
- else
- {
- if (x > (y * two60))
- return x + y;
- }
- if (x > two500)
- {
- x *= twoM600;
- y *= twoM600;
- return __ieee754_sqrt (x * x + y * y) / twoM600;
- }
- if (y < twoM500)
- {
- if (y <= pdnum)
- {
- x *= two1022;
- y *= two1022;
- double ret = __ieee754_sqrt (x * x + y * y) / two1022;
- math_check_force_underflow_nonneg (ret);
- return ret;
- }
- else
- {
- x *= two600;
- y *= two600;
- return __ieee754_sqrt (x * x + y * y) / two600;
- }
- }
- return __ieee754_sqrt (x * x + y * y);
-}
-strong_alias (__ieee754_hypot, __hypot_finite)
diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c
deleted file mode 100644
index 8502ca962a..0000000000
--- a/sysdeps/powerpc/fpu/e_hypotf.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Pythagorean addition using floats
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-#include <math_private.h>
-#include <stdint.h>
-
-/* __ieee754_hypotf(x,y)
-
- This a FP only version without any FP->INT conversion.
- It is similar to default C version, making appropriates
- overflow and underflows checks as using double precision
- instead of scaling. */
-
-#ifdef _ARCH_PWR7
-/* POWER7 isinf and isnan optimizations are fast. */
-# define TEST_INF_NAN(x, y) \
- if ((isinff(x) || isinff(y)) \
- && !issignaling (x) && !issignaling (y)) \
- return INFINITY; \
- if (isnanf(x) || isnanf(y)) \
- return x + y;
-# else
-/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are
- * costly (especially for POWER6). */
-# define GET_TWO_FLOAT_WORD(f1,f2,i1,i2) \
- do { \
- ieee_float_shape_type gf_u1; \
- ieee_float_shape_type gf_u2; \
- gf_u1.value = (f1); \
- gf_u2.value = (f2); \
- (i1) = gf_u1.word & 0x7fffffff; \
- (i2) = gf_u2.word & 0x7fffffff; \
- } while (0)
-
-# define TEST_INF_NAN(x, y) \
- do { \
- uint32_t hx, hy; \
- GET_TWO_FLOAT_WORD(x, y, hx, hy); \
- if (hy > hx) { \
- uint32_t ht = hx; hx = hy; hy = ht; \
- } \
- if (hx >= 0x7f800000) { \
- if ((hx == 0x7f800000 || hy == 0x7f800000) \
- && !issignaling (x) && !issignaling (y)) \
- return INFINITY; \
- return x + y; \
- } \
- } while (0)
-#endif
-
-
-float
-__ieee754_hypotf (float x, float y)
-{
- TEST_INF_NAN (x, y);
-
- return __ieee754_sqrt ((double) x * x + (double) y * y);
-}
-strong_alias (__ieee754_hypotf, __hypotf_finite)
diff --git a/sysdeps/powerpc/fpu/e_rem_pio2f.c b/sysdeps/powerpc/fpu/e_rem_pio2f.c
deleted file mode 100644
index 8563e7c5e4..0000000000
--- a/sysdeps/powerpc/fpu/e_rem_pio2f.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/* e_rem_pio2f.c -- float version of e_rem_pio2.c
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-
-#include <math_private.h>
-#include "s_float_bitwise.h"
-
-/* defined in sysdeps/powerpc/fpu/k_rem_pio2f.c */
-int __fp_kernel_rem_pio2f (float *x, float *y, float e0, int32_t nx);
-
-/* __ieee754_rem_pio2f(x,y)
- *
- * return the remainder of x rem pi/2 in y[0]+y[1]
- */
-
-static const float npio2_hw[] = {
- 1.57077026e+00, 3.14154053e+00, 4.71228027e+00, 6.28308105e+00,
- 7.85388184e+00, 9.42456055e+00, 1.09953613e+01, 1.25661621e+01,
- 1.41369629e+01, 1.57077637e+01, 1.72783203e+01, 1.88491211e+01,
- 2.04199219e+01, 2.19907227e+01, 2.35615234e+01, 2.51323242e+01,
- 2.67031250e+01, 2.82739258e+01, 2.98447266e+01, 3.14155273e+01,
- 3.29863281e+01, 3.45566406e+01, 3.61279297e+01, 3.76982422e+01,
- 3.92695312e+01, 4.08398438e+01, 4.24111328e+01, 4.39814453e+01,
- 4.55527344e+01, 4.71230469e+01, 4.86943359e+01, 5.02646484e+01
-};
-
-
-static const float zero = 0.0000000000e+00;
-static const float two8 = 2.5600000000e+02;
-
-static const float half = 5.0000000000e-01;
-static const float invpio2 = 6.3661980629e-01;
-static const float pio2_1 = 1.5707855225e+00;
-static const float pio2_1t = 1.0804334124e-05;
-static const float pio2_2 = 1.0804273188e-05;
-static const float pio2_2t = 6.0770999344e-11;
-static const float pio2_3 = 6.0770943833e-11;
-static const float pio2_3t = 6.1232342629e-17;
-
-static const float pio4 = 7.8539801e-01;
-static const float pio3_4 = 2.3561945e+00;
-static const float pio2_24b = 1.5707951e+00;
-static const float pio2_2e7 = 2.0106054e+02;
-
-
-int32_t
-__ieee754_rem_pio2f (float x, float *y)
-{
- float ax, z, n, r, w, t, e0;
- float tx[3];
- int32_t i, nx;
-
- ax = __builtin_fabsf (x);
- if (ax <= pio4)
- {
- y[0] = x;
- y[1] = 0;
- return 0;
- }
- if (ax < pio3_4)
- {
- if (x > 0)
- {
- z = x - pio2_1;
- if (!__float_and_test28 (ax, pio2_24b))
- {
- y[0] = z - pio2_1t;
- y[1] = (z - y[0]) - pio2_1t;
- }
- else
- {
- z -= pio2_2;
- y[0] = z - pio2_2t;
- y[1] = (z - y[0]) - pio2_2t;
- }
- return 1;
- }
- else
- {
- z = x + pio2_1;
- if (!__float_and_test28 (ax, pio2_24b))
- {
- y[0] = z + pio2_1t;
- y[1] = (z - y[0]) + pio2_1t;
- }
- else
- {
- z += pio2_2;
- y[0] = z + pio2_2t;
- y[1] = (z - y[0]) + pio2_2t;
- }
- return -1;
- }
- }
- if (ax <= pio2_2e7)
- {
- n = __floorf (ax * invpio2 + half);
- i = (int32_t) n;
- r = ax - n * pio2_1;
- w = n * pio2_1t; /* 1st round good to 40 bit */
- if (i < 32 && !__float_and_test24 (ax, npio2_hw[i - 1]))
- {
- y[0] = r - w;
- }
- else
- {
- float i, j;
- j = __float_and8 (ax);
- y[0] = r - w;
- i = __float_and8 (y[0]);
- if (j / i > 256.0 || j / i < 3.9062500e-3)
- { /* 2nd iterations needed, good to 57 */
- t = r;
- w = n * pio2_2;
- r = t - w;
- w = n * pio2_2t - ((t - r) - w);
- y[0] = r - w;
- i = __float_and8 (y[0]);
- if (j / i > 33554432 || j / i < 2.9802322e-8)
- { /* 3rd iteration needed, 74 bits acc */
- t = r;
- w = n * pio2_3;
- r = t - w;
- w = n * pio2_3t - ((t - r) - w);
- y[0] = r - w;
- }
- }
- }
- y[1] = (r - y[0]) - w;
- if (x < 0)
- {
- y[0] = -y[0];
- y[1] = -y[1];
- return -i;
- }
- else
- {
- return i;
- }
- }
-
- /* all other (large) arguments */
- if (isnanf (x) || isinff (x))
- {
- y[0] = y[1] = x - x;
- return 0;
- }
-
- /* set z = scalbn(|x|,ilogb(x)-7) */
- e0 = __float_and8 (ax / 128.0);
- z = ax / e0;
-
- tx[0] = __floorf (z);
- z = (z - tx[0]) * two8;
- tx[1] = __floorf (z);
- z = (z - tx[1]) * two8;
- tx[2] = __floorf (z);
-
- nx = 3;
- while (tx[nx - 1] == zero)
- nx--;
-
- i = __fp_kernel_rem_pio2f (tx, y, e0, nx);
- if (x < 0)
- {
- y[0] = -y[0];
- y[1] = -y[1];
- return -i;
- }
- return i;
-}
diff --git a/sysdeps/powerpc/fpu/e_sqrt.c b/sysdeps/powerpc/fpu/e_sqrt.c
deleted file mode 100644
index 1c8977d6ad..0000000000
--- a/sysdeps/powerpc/fpu/e_sqrt.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Double-precision floating point square root.
- Copyright (C) 1997-2017 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>
-#include <fenv_libc.h>
-#include <inttypes.h>
-#include <stdint.h>
-#include <sysdep.h>
-#include <ldsodefs.h>
-
-#ifndef _ARCH_PPCSQ
-static const double almost_half = 0.5000000000000001; /* 0.5 + 2^-53 */
-static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-static const float two108 = 3.245185536584267269e+32;
-static const float twom54 = 5.551115123125782702e-17;
-extern const float __t_sqrt[1024];
-
-/* The method is based on a description in
- Computation of elementary functions on the IBM RISC System/6000 processor,
- P. W. Markstein, IBM J. Res. Develop, 34(1) 1990.
- Basically, it consists of two interleaved Newton-Raphson approximations,
- one to find the actual square root, and one to find its reciprocal
- without the expense of a division operation. The tricky bit here
- is the use of the POWER/PowerPC multiply-add operation to get the
- required accuracy with high speed.
-
- The argument reduction works by a combination of table lookup to
- obtain the initial guesses, and some careful modification of the
- generated guesses (which mostly runs on the integer unit, while the
- Newton-Raphson is running on the FPU). */
-
-double
-__slow_ieee754_sqrt (double x)
-{
- const float inf = a_inf.value;
-
- if (x > 0)
- {
- /* schedule the EXTRACT_WORDS to get separation between the store
- and the load. */
- ieee_double_shape_type ew_u;
- ieee_double_shape_type iw_u;
- ew_u.value = (x);
- if (x != inf)
- {
- /* Variables named starting with 's' exist in the
- argument-reduced space, so that 2 > sx >= 0.5,
- 1.41... > sg >= 0.70.., 0.70.. >= sy > 0.35... .
- Variables named ending with 'i' are integer versions of
- floating-point values. */
- double sx; /* The value of which we're trying to find the
- square root. */
- double sg, g; /* Guess of the square root of x. */
- double sd, d; /* Difference between the square of the guess and x. */
- double sy; /* Estimate of 1/2g (overestimated by 1ulp). */
- double sy2; /* 2*sy */
- double e; /* Difference between y*g and 1/2 (se = e * fsy). */
- double shx; /* == sx * fsg */
- double fsg; /* sg*fsg == g. */
- fenv_t fe; /* Saved floating-point environment (stores rounding
- mode and whether the inexact exception is
- enabled). */
- uint32_t xi0, xi1, sxi, fsgi;
- const float *t_sqrt;
-
- fe = fegetenv_register ();
- /* complete the EXTRACT_WORDS (xi0,xi1,x) operation. */
- xi0 = ew_u.parts.msw;
- xi1 = ew_u.parts.lsw;
- relax_fenv_state ();
- sxi = (xi0 & 0x3fffffff) | 0x3fe00000;
- /* schedule the INSERT_WORDS (sx, sxi, xi1) to get separation
- between the store and the load. */
- iw_u.parts.msw = sxi;
- iw_u.parts.lsw = xi1;
- t_sqrt = __t_sqrt + (xi0 >> (52 - 32 - 8 - 1) & 0x3fe);
- sg = t_sqrt[0];
- sy = t_sqrt[1];
- /* complete the INSERT_WORDS (sx, sxi, xi1) operation. */
- sx = iw_u.value;
-
- /* Here we have three Newton-Raphson iterations each of a
- division and a square root and the remainder of the
- argument reduction, all interleaved. */
- sd = -__builtin_fma (sg, sg, -sx);
- fsgi = (xi0 + 0x40000000) >> 1 & 0x7ff00000;
- sy2 = sy + sy;
- sg = __builtin_fma (sy, sd, sg); /* 16-bit approximation to
- sqrt(sx). */
-
- /* schedule the INSERT_WORDS (fsg, fsgi, 0) to get separation
- between the store and the load. */
- INSERT_WORDS (fsg, fsgi, 0);
- iw_u.parts.msw = fsgi;
- iw_u.parts.lsw = (0);
- e = -__builtin_fma (sy, sg, -almost_half);
- sd = -__builtin_fma (sg, sg, -sx);
- if ((xi0 & 0x7ff00000) == 0)
- goto denorm;
- sy = __builtin_fma (e, sy2, sy);
- sg = __builtin_fma (sy, sd, sg); /* 32-bit approximation to
- sqrt(sx). */
- sy2 = sy + sy;
- /* complete the INSERT_WORDS (fsg, fsgi, 0) operation. */
- fsg = iw_u.value;
- e = -__builtin_fma (sy, sg, -almost_half);
- sd = -__builtin_fma (sg, sg, -sx);
- sy = __builtin_fma (e, sy2, sy);
- shx = sx * fsg;
- sg = __builtin_fma (sy, sd, sg); /* 64-bit approximation to
- sqrt(sx), but perhaps
- rounded incorrectly. */
- sy2 = sy + sy;
- g = sg * fsg;
- e = -__builtin_fma (sy, sg, -almost_half);
- d = -__builtin_fma (g, sg, -shx);
- sy = __builtin_fma (e, sy2, sy);
- fesetenv_register (fe);
- return __builtin_fma (sy, d, g);
- denorm:
- /* For denormalised numbers, we normalise, calculate the
- square root, and return an adjusted result. */
- fesetenv_register (fe);
- return __slow_ieee754_sqrt (x * two108) * twom54;
- }
- }
- else if (x < 0)
- {
- /* For some reason, some PowerPC32 processors don't implement
- FE_INVALID_SQRT. */
-#ifdef FE_INVALID_SQRT
- __feraiseexcept (FE_INVALID_SQRT);
-
- fenv_union_t u = { .fenv = fegetenv_register () };
- if ((u.l & FE_INVALID) == 0)
-#endif
- __feraiseexcept (FE_INVALID);
- x = a_nan.value;
- }
- return f_wash (x);
-}
-#endif /* _ARCH_PPCSQ */
-
-#undef __ieee754_sqrt
-double
-__ieee754_sqrt (double x)
-{
- double z;
-
-#ifdef _ARCH_PPCSQ
- asm ("fsqrt %0,%1\n" :"=f" (z):"f" (x));
-#else
- z = __slow_ieee754_sqrt (x);
-#endif
-
- return z;
-}
-strong_alias (__ieee754_sqrt, __sqrt_finite)
diff --git a/sysdeps/powerpc/fpu/e_sqrtf.c b/sysdeps/powerpc/fpu/e_sqrtf.c
deleted file mode 100644
index 65d27b4d42..0000000000
--- a/sysdeps/powerpc/fpu/e_sqrtf.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Single-precision floating point square root.
- Copyright (C) 1997-2017 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>
-#include <fenv_libc.h>
-#include <inttypes.h>
-#include <stdint.h>
-#include <sysdep.h>
-#include <ldsodefs.h>
-
-#ifndef _ARCH_PPCSQ
-static const float almost_half = 0.50000006; /* 0.5 + 2^-24 */
-static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 };
-static const ieee_float_shape_type a_inf = {.word = 0x7f800000 };
-static const float two48 = 281474976710656.0;
-static const float twom24 = 5.9604644775390625e-8;
-extern const float __t_sqrt[1024];
-
-/* The method is based on a description in
- Computation of elementary functions on the IBM RISC System/6000 processor,
- P. W. Markstein, IBM J. Res. Develop, 34(1) 1990.
- Basically, it consists of two interleaved Newton-Raphson approximations,
- one to find the actual square root, and one to find its reciprocal
- without the expense of a division operation. The tricky bit here
- is the use of the POWER/PowerPC multiply-add operation to get the
- required accuracy with high speed.
-
- The argument reduction works by a combination of table lookup to
- obtain the initial guesses, and some careful modification of the
- generated guesses (which mostly runs on the integer unit, while the
- Newton-Raphson is running on the FPU). */
-
-float
-__slow_ieee754_sqrtf (float x)
-{
- const float inf = a_inf.value;
-
- if (x > 0)
- {
- if (x != inf)
- {
- /* Variables named starting with 's' exist in the
- argument-reduced space, so that 2 > sx >= 0.5,
- 1.41... > sg >= 0.70.., 0.70.. >= sy > 0.35... .
- Variables named ending with 'i' are integer versions of
- floating-point values. */
- float sx; /* The value of which we're trying to find the square
- root. */
- float sg, g; /* Guess of the square root of x. */
- float sd, d; /* Difference between the square of the guess and x. */
- float sy; /* Estimate of 1/2g (overestimated by 1ulp). */
- float sy2; /* 2*sy */
- float e; /* Difference between y*g and 1/2 (note that e==se). */
- float shx; /* == sx * fsg */
- float fsg; /* sg*fsg == g. */
- fenv_t fe; /* Saved floating-point environment (stores rounding
- mode and whether the inexact exception is
- enabled). */
- uint32_t xi, sxi, fsgi;
- const float *t_sqrt;
-
- GET_FLOAT_WORD (xi, x);
- fe = fegetenv_register ();
- relax_fenv_state ();
- sxi = (xi & 0x3fffffff) | 0x3f000000;
- SET_FLOAT_WORD (sx, sxi);
- t_sqrt = __t_sqrt + (xi >> (23 - 8 - 1) & 0x3fe);
- sg = t_sqrt[0];
- sy = t_sqrt[1];
-
- /* Here we have three Newton-Raphson iterations each of a
- division and a square root and the remainder of the
- argument reduction, all interleaved. */
- sd = -__builtin_fmaf (sg, sg, -sx);
- fsgi = (xi + 0x40000000) >> 1 & 0x7f800000;
- sy2 = sy + sy;
- sg = __builtin_fmaf (sy, sd, sg); /* 16-bit approximation to
- sqrt(sx). */
- e = -__builtin_fmaf (sy, sg, -almost_half);
- SET_FLOAT_WORD (fsg, fsgi);
- sd = -__builtin_fmaf (sg, sg, -sx);
- sy = __builtin_fmaf (e, sy2, sy);
- if ((xi & 0x7f800000) == 0)
- goto denorm;
- shx = sx * fsg;
- sg = __builtin_fmaf (sy, sd, sg); /* 32-bit approximation to
- sqrt(sx), but perhaps
- rounded incorrectly. */
- sy2 = sy + sy;
- g = sg * fsg;
- e = -__builtin_fmaf (sy, sg, -almost_half);
- d = -__builtin_fmaf (g, sg, -shx);
- sy = __builtin_fmaf (e, sy2, sy);
- fesetenv_register (fe);
- return __builtin_fmaf (sy, d, g);
- denorm:
- /* For denormalised numbers, we normalise, calculate the
- square root, and return an adjusted result. */
- fesetenv_register (fe);
- return __slow_ieee754_sqrtf (x * two48) * twom24;
- }
- }
- else if (x < 0)
- {
- /* For some reason, some PowerPC32 processors don't implement
- FE_INVALID_SQRT. */
-#ifdef FE_INVALID_SQRT
- feraiseexcept (FE_INVALID_SQRT);
-
- fenv_union_t u = { .fenv = fegetenv_register () };
- if ((u.l & FE_INVALID) == 0)
-#endif
- feraiseexcept (FE_INVALID);
- x = a_nan.value;
- }
- return f_washf (x);
-}
-#endif /* _ARCH_PPCSQ */
-
-#undef __ieee754_sqrtf
-float
-__ieee754_sqrtf (float x)
-{
- double z;
-
-#ifdef _ARCH_PPCSQ
- asm ("fsqrts %0,%1\n" :"=f" (z):"f" (x));
-#else
- z = __slow_ieee754_sqrtf (x);
-#endif
-
- return z;
-}
-strong_alias (__ieee754_sqrtf, __sqrtf_finite)
diff --git a/sysdeps/powerpc/fpu/fclrexcpt.c b/sysdeps/powerpc/fpu/fclrexcpt.c
deleted file mode 100644
index 2ee9547833..0000000000
--- a/sysdeps/powerpc/fpu/fclrexcpt.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Clear given exceptions in current floating-point environment.
- Copyright (C) 1997-2017 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_libc.h>
-
-#undef feclearexcept
-int
-__feclearexcept (int excepts)
-{
- fenv_union_t u, n;
-
- /* Get the current state. */
- u.fenv = fegetenv_register ();
-
- /* Clear the relevant bits. */
- n.l = u.l & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID)
- | (excepts & FPSCR_STICKY_BITS));
-
- /* Put the new state in effect. */
- if (u.l != n.l)
- fesetenv_register (n.fenv);
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feclearexcept, __old_feclearexcept)
-compat_symbol (libm, __old_feclearexcept, feclearexcept, GLIBC_2_1);
-#endif
-
-libm_hidden_ver (__feclearexcept, feclearexcept)
-versioned_symbol (libm, __feclearexcept, feclearexcept, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fe_mask.c b/sysdeps/powerpc/fpu/fe_mask.c
deleted file mode 100644
index bbe41a9d92..0000000000
--- a/sysdeps/powerpc/fpu/fe_mask.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Procedure definition for FE_MASK_ENV.
- Copyright (C) 2007-2017 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 <errno.h>
-
-/* This is a generic stub. An OS specific override is required to clear
- the FE0/FE1 bits in the MSR. MSR update is privileged, so this will
- normally involve a syscall. */
-
-const fenv_t *
-__fe_mask_env(void)
-{
- __set_errno (ENOSYS);
- return FE_DFL_ENV;
-}
-stub_warning (__fe_mask_env)
diff --git a/sysdeps/powerpc/fpu/fe_nomask.c b/sysdeps/powerpc/fpu/fe_nomask.c
deleted file mode 100644
index 3b42aedd15..0000000000
--- a/sysdeps/powerpc/fpu/fe_nomask.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Procedure definition for FE_NOMASK_ENV.
- Copyright (C) 1997-2017 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_libc.h>
-#include <errno.h>
-
-/* This is a generic stub. An OS specific override is required to set
- the FE0/FE1 bits in the MSR. MSR update is privileged, so this will
- normally involve a syscall. */
-
-const fenv_t *
-__fe_nomask_env_priv (void)
-{
- __set_errno (ENOSYS);
- return FE_ENABLED_ENV;
-}
-stub_warning (__fe_nomask_env_priv)
diff --git a/sysdeps/powerpc/fpu/fedisblxcpt.c b/sysdeps/powerpc/fpu/fedisblxcpt.c
deleted file mode 100644
index bb10b4701a..0000000000
--- a/sysdeps/powerpc/fpu/fedisblxcpt.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Disable floating-point exceptions.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
-
- 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_libc.h>
-
-int
-fedisableexcept (int excepts)
-{
- fenv_union_t fe, curr;
- int result, new;
-
- /* Get current exception mask to return. */
- fe.fenv = curr.fenv = fegetenv_register ();
- result = fenv_reg_to_exceptions (fe.l);
-
- if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID)
- excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID;
-
- /* Sets the new exception mask. */
- if (excepts & FE_INEXACT)
- fe.l &= ~(1 << (31 - FPSCR_XE));
- if (excepts & FE_DIVBYZERO)
- fe.l &= ~(1 << (31 - FPSCR_ZE));
- if (excepts & FE_UNDERFLOW)
- fe.l &= ~(1 << (31 - FPSCR_UE));
- if (excepts & FE_OVERFLOW)
- fe.l &= ~(1 << (31 - FPSCR_OE));
- if (excepts & FE_INVALID)
- fe.l &= ~(1 << (31 - FPSCR_VE));
-
- if (fe.l != curr.l)
- fesetenv_register (fe.fenv);
-
- new = __fegetexcept ();
- if (new == 0 && result != 0)
- (void)__fe_mask_env ();
-
- if ((new & excepts) != 0)
- result = -1;
- return result;
-}
diff --git a/sysdeps/powerpc/fpu/feenablxcpt.c b/sysdeps/powerpc/fpu/feenablxcpt.c
deleted file mode 100644
index 7f0b333fc6..0000000000
--- a/sysdeps/powerpc/fpu/feenablxcpt.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Enable floating-point exceptions.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
-
- 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_libc.h>
-
-int
-feenableexcept (int excepts)
-{
- fenv_union_t fe, curr;
- int result, new;
-
- /* Get current exception mask to return. */
- fe.fenv = curr.fenv = fegetenv_register ();
- result = fenv_reg_to_exceptions (fe.l);
-
- if ((excepts & FE_ALL_INVALID) == FE_ALL_INVALID)
- excepts = (excepts | FE_INVALID) & ~ FE_ALL_INVALID;
-
- /* Sets the new exception mask. */
- if (excepts & FE_INEXACT)
- fe.l |= (1 << (31 - FPSCR_XE));
- if (excepts & FE_DIVBYZERO)
- fe.l |= (1 << (31 - FPSCR_ZE));
- if (excepts & FE_UNDERFLOW)
- fe.l |= (1 << (31 - FPSCR_UE));
- if (excepts & FE_OVERFLOW)
- fe.l |= (1 << (31 - FPSCR_OE));
- if (excepts & FE_INVALID)
- fe.l |= (1 << (31 - FPSCR_VE));
-
- if (fe.l != curr.l)
- fesetenv_register (fe.fenv);
-
- new = __fegetexcept ();
- if (new != 0 && result == 0)
- (void) __fe_nomask_env_priv ();
-
- if ((new & excepts) != excepts)
- result = -1;
-
- return result;
-}
diff --git a/sysdeps/powerpc/fpu/fegetenv.c b/sysdeps/powerpc/fpu/fegetenv.c
deleted file mode 100644
index 251977beba..0000000000
--- a/sysdeps/powerpc/fpu/fegetenv.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Store current floating-point environment.
- Copyright (C) 1997-2017 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_libc.h>
-
-int
-__fegetenv (fenv_t *envp)
-{
- *envp = fegetenv_register ();
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fegetenv, __old_fegetenv)
-compat_symbol (libm, __old_fegetenv, fegetenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__fegetenv)
-libm_hidden_ver (__fegetenv, fegetenv)
-versioned_symbol (libm, __fegetenv, fegetenv, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fegetexcept.c b/sysdeps/powerpc/fpu/fegetexcept.c
deleted file mode 100644
index 2b9899abe2..0000000000
--- a/sysdeps/powerpc/fpu/fegetexcept.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Get floating-point exceptions.
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Geoffrey Keating <geoffk@geoffk.org>, 2000.
-
- 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_libc.h>
-
-int
-__fegetexcept (void)
-{
- fenv_union_t fe;
- int result = 0;
-
- fe.fenv = fegetenv_register ();
-
- if (fe.l & (1 << (31 - FPSCR_XE)))
- result |= FE_INEXACT;
- if (fe.l & (1 << (31 - FPSCR_ZE)))
- result |= FE_DIVBYZERO;
- if (fe.l & (1 << (31 - FPSCR_UE)))
- result |= FE_UNDERFLOW;
- if (fe.l & (1 << (31 - FPSCR_OE)))
- result |= FE_OVERFLOW;
- if (fe.l & (1 << (31 - FPSCR_VE)))
- result |= FE_INVALID;
-
- return result;
-}
-weak_alias (__fegetexcept, fegetexcept)
diff --git a/sysdeps/powerpc/fpu/fegetmode.c b/sysdeps/powerpc/fpu/fegetmode.c
deleted file mode 100644
index 5597000a4b..0000000000
--- a/sysdeps/powerpc/fpu/fegetmode.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Store current floating-point control modes. PowerPC version.
- Copyright (C) 2016-2017 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_libc.h>
-
-int
-fegetmode (femode_t *modep)
-{
- *modep = fegetenv_register ();
- return 0;
-}
diff --git a/sysdeps/powerpc/fpu/fegetround.c b/sysdeps/powerpc/fpu/fegetround.c
deleted file mode 100644
index bedb02f0e5..0000000000
--- a/sysdeps/powerpc/fpu/fegetround.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Return current rounding direction.
- Copyright (C) 1997-2017 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_libc.h>
-
-int
-(__fegetround) (void)
-{
- return __fegetround();
-}
-#undef fegetround
-#undef __fegetround
-libm_hidden_def (__fegetround)
-weak_alias (__fegetround, fegetround)
-libm_hidden_weak (fegetround)
diff --git a/sysdeps/powerpc/fpu/feholdexcpt.c b/sysdeps/powerpc/fpu/feholdexcpt.c
deleted file mode 100644
index fef49c33a9..0000000000
--- a/sysdeps/powerpc/fpu/feholdexcpt.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997-2017 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_libc.h>
-#include <fpu_control.h>
-#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM)
-
-int
-__feholdexcept (fenv_t *envp)
-{
- fenv_union_t old, new;
-
- /* Save the currently set exceptions. */
- old.fenv = *envp = fegetenv_register ();
-
- /* Clear everything except for the rounding modes and non-IEEE arithmetic
- flag. */
- new.l = old.l & 0xffffffff00000007LL;
-
- if (new.l == old.l)
- return 0;
-
- /* If the old env had any enabled exceptions, then mask SIGFPE in the
- MSR FE0/FE1 bits. This may allow the FPU to run faster because it
- always takes the default action and can not generate SIGFPE. */
- if ((old.l & _FPU_MASK_ALL) != 0)
- (void)__fe_mask_env ();
-
- /* Put the new state in effect. */
- fesetenv_register (new.fenv);
-
- return 0;
-}
-libm_hidden_def (__feholdexcept)
-weak_alias (__feholdexcept, feholdexcept)
-libm_hidden_weak (feholdexcept)
diff --git a/sysdeps/powerpc/fpu/fenv_const.c b/sysdeps/powerpc/fpu/fenv_const.c
deleted file mode 100644
index c5e088c98e..0000000000
--- a/sysdeps/powerpc/fpu/fenv_const.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Constants for fenv_bits.h.
- Copyright (C) 1997-2017 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/>. */
-
-/* We want to specify the bit pattern of the __fe_*_env constants, so
- pretend they're really `long long' instead of `double'. */
-
-/* If the default argument is used we use this value. */
-const unsigned long long __fe_dfl_env __attribute__ ((aligned (8))) =
-0xfff8000000000000ULL;
-
-/* The same representation is used for femode_t. */
-extern const unsigned long long __fe_dfl_mode
- __attribute__ ((aligned (8), alias ("__fe_dfl_env")));
-
-/* Floating-point environment where none of the exceptions are masked. */
-const unsigned long long __fe_enabled_env __attribute__ ((aligned (8))) =
-0xfff80000000000f8ULL;
-
-/* Floating-point environment with the NI bit set. */
-const unsigned long long __fe_nonieee_env __attribute__ ((aligned (8))) =
-0xfff8000000000004ULL;
diff --git a/sysdeps/powerpc/fpu/fenv_libc.h b/sysdeps/powerpc/fpu/fenv_libc.h
deleted file mode 100644
index 500ac042b4..0000000000
--- a/sysdeps/powerpc/fpu/fenv_libc.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Internal libc stuff for floating point environment routines.
- Copyright (C) 1997-2017 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/>. */
-
-#ifndef _FENV_LIBC_H
-#define _FENV_LIBC_H 1
-
-#include <fenv.h>
-#include <ldsodefs.h>
-#include <sysdep.h>
-
-extern const fenv_t *__fe_nomask_env_priv (void);
-
-extern const fenv_t *__fe_mask_env (void) attribute_hidden;
-
-/* The sticky bits in the FPSCR indicating exceptions have occurred. */
-#define FPSCR_STICKY_BITS ((FE_ALL_EXCEPT | FE_ALL_INVALID) & ~FE_INVALID)
-
-/* Equivalent to fegetenv, but returns a fenv_t instead of taking a
- pointer. */
-#define fegetenv_register() \
- ({ fenv_t env; asm volatile ("mffs %0" : "=f" (env)); env; })
-
-/* Equivalent to fesetenv, but takes a fenv_t instead of a pointer. */
-#define fesetenv_register(env) \
- do { \
- double d = (env); \
- if(GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
- asm volatile (".machine push; " \
- ".machine \"power6\"; " \
- "mtfsf 0xff,%0,1,0; " \
- ".machine pop" : : "f" (d)); \
- else \
- asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \
- } while(0)
-
-/* This very handy macro:
- - Sets the rounding mode to 'round to nearest';
- - Sets the processor into IEEE mode; and
- - Prevents exceptions from being raised for inexact results.
- These things happen to be exactly what you need for typical elementary
- functions. */
-#define relax_fenv_state() \
- do { \
- if (GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
- asm (".machine push; .machine \"power6\"; " \
- "mtfsfi 7,0,1; .machine pop"); \
- asm ("mtfsfi 7,0"); \
- } while(0)
-
-/* Set/clear a particular FPSCR bit (for instance,
- reset_fpscr_bit(FPSCR_VE);
- prevents INVALID exceptions from being raised). */
-#define set_fpscr_bit(x) asm volatile ("mtfsb1 %0" : : "i"(x))
-#define reset_fpscr_bit(x) asm volatile ("mtfsb0 %0" : : "i"(x))
-
-typedef union
-{
- fenv_t fenv;
- unsigned long long l;
-} fenv_union_t;
-
-
-static inline int
-__fesetround_inline (int round)
-{
- if ((unsigned int) round < 2)
- {
- asm volatile ("mtfsb0 30");
- if ((unsigned int) round == 0)
- asm volatile ("mtfsb0 31");
- else
- asm volatile ("mtfsb1 31");
- }
- else
- {
- asm volatile ("mtfsb1 30");
- if ((unsigned int) round == 2)
- asm volatile ("mtfsb0 31");
- else
- asm volatile ("mtfsb1 31");
- }
-
- return 0;
-}
-
-/* Definitions of all the FPSCR bit numbers */
-enum {
- FPSCR_FX = 0, /* exception summary */
- FPSCR_FEX, /* enabled exception summary */
- FPSCR_VX, /* invalid operation summary */
- FPSCR_OX, /* overflow */
- FPSCR_UX, /* underflow */
- FPSCR_ZX, /* zero divide */
- FPSCR_XX, /* inexact */
- FPSCR_VXSNAN, /* invalid operation for sNaN */
- FPSCR_VXISI, /* invalid operation for Inf-Inf */
- FPSCR_VXIDI, /* invalid operation for Inf/Inf */
- FPSCR_VXZDZ, /* invalid operation for 0/0 */
- FPSCR_VXIMZ, /* invalid operation for Inf*0 */
- FPSCR_VXVC, /* invalid operation for invalid compare */
- FPSCR_FR, /* fraction rounded [fraction was incremented by round] */
- FPSCR_FI, /* fraction inexact */
- FPSCR_FPRF_C, /* result class descriptor */
- FPSCR_FPRF_FL, /* result less than (usually, less than 0) */
- FPSCR_FPRF_FG, /* result greater than */
- FPSCR_FPRF_FE, /* result equal to */
- FPSCR_FPRF_FU, /* result unordered */
- FPSCR_20, /* reserved */
- FPSCR_VXSOFT, /* invalid operation set by software */
- FPSCR_VXSQRT, /* invalid operation for square root */
- FPSCR_VXCVI, /* invalid operation for invalid integer convert */
- FPSCR_VE, /* invalid operation exception enable */
- FPSCR_OE, /* overflow exception enable */
- FPSCR_UE, /* underflow exception enable */
- FPSCR_ZE, /* zero divide exception enable */
- FPSCR_XE, /* inexact exception enable */
-#ifdef _ARCH_PWR6
- FPSCR_29, /* Reserved in ISA 2.05 */
-#else
- FPSCR_NI /* non-IEEE mode (typically, no denormalised numbers) */
-#endif /* _ARCH_PWR6 */
- /* the remaining two least-significant bits keep the rounding mode */
-};
-
-static inline int
-fenv_reg_to_exceptions (unsigned long long l)
-{
- int result = 0;
- if (l & (1 << (31 - FPSCR_XE)))
- result |= FE_INEXACT;
- if (l & (1 << (31 - FPSCR_ZE)))
- result |= FE_DIVBYZERO;
- if (l & (1 << (31 - FPSCR_UE)))
- result |= FE_UNDERFLOW;
- if (l & (1 << (31 - FPSCR_OE)))
- result |= FE_OVERFLOW;
- if (l & (1 << (31 - FPSCR_VE)))
- result |= FE_INVALID;
- return result;
-}
-
-#ifdef _ARCH_PWR6
- /* Not supported in ISA 2.05. Provided for source compat only. */
-# define FPSCR_NI 29
-#endif /* _ARCH_PWR6 */
-
-/* This operation (i) sets the appropriate FPSCR bits for its
- parameter, (ii) converts sNaN to the corresponding qNaN, and (iii)
- otherwise passes its parameter through unchanged (in particular, -0
- and +0 stay as they were). The `obvious' way to do this is optimised
- out by gcc. */
-#define f_wash(x) \
- ({ double d; asm volatile ("fmul %0,%1,%2" \
- : "=f"(d) \
- : "f" (x), "f"((float)1.0)); d; })
-#define f_washf(x) \
- ({ float f; asm volatile ("fmuls %0,%1,%2" \
- : "=f"(f) \
- : "f" (x), "f"((float)1.0)); f; })
-
-#endif /* fenv_libc.h */
diff --git a/sysdeps/powerpc/fpu/fenv_private.h b/sysdeps/powerpc/fpu/fenv_private.h
deleted file mode 100644
index 877f25bcf2..0000000000
--- a/sysdeps/powerpc/fpu/fenv_private.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Private floating point rounding and exceptions handling. PowerPC version.
- Copyright (C) 2013-2017 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/>. */
-
-#ifndef FENV_PRIVATE_H
-#define FENV_PRIVATE_H 1
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-/* Mask for the exception enable bits. */
-#define _FPU_ALL_TRAPS (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM \
- | _FPU_MASK_XM | _FPU_MASK_IM)
-
-/* Mask the rounding mode bits. */
-#define _FPU_MASK_RN (~0x3)
-
-/* Mask everything but the rounding moded and non-IEEE arithmetic flags. */
-#define _FPU_MASK_NOT_RN_NI 0xffffffff00000007LL
-
-/* Mask restore rounding mode and exception enabled. */
-#define _FPU_MASK_TRAPS_RN 0xffffffff1fffff00LL
-
-/* Mask exception enable but fraction rounded/inexact and FP result/CC
- bits. */
-#define _FPU_MASK_FRAC_INEX_RET_CC 0xffffffff1ff80fff
-
-static __always_inline void
-__libc_feholdbits_ppc (fenv_t *envp, unsigned long long mask,
- unsigned long long bits)
-{
- fenv_union_t old, new;
-
- old.fenv = *envp = fegetenv_register ();
-
- new.l = (old.l & mask) | bits;
-
- /* If the old env had any enabled exceptions, then mask SIGFPE in the
- MSR FE0/FE1 bits. This may allow the FPU to run faster because it
- always takes the default action and can not generate SIGFPE. */
- if ((old.l & _FPU_ALL_TRAPS) != 0)
- (void) __fe_mask_env ();
-
- fesetenv_register (new.fenv);
-}
-
-static __always_inline void
-libc_feholdexcept_ppc (fenv_t *envp)
-{
- __libc_feholdbits_ppc (envp, _FPU_MASK_NOT_RN_NI, 0LL);
-}
-
-static __always_inline void
-libc_feholdexcept_setround_ppc (fenv_t *envp, int r)
-{
- __libc_feholdbits_ppc (envp, _FPU_MASK_NOT_RN_NI & _FPU_MASK_RN, r);
-}
-
-static __always_inline void
-libc_fesetround_ppc (int r)
-{
- __fesetround_inline (r);
-}
-
-static __always_inline int
-libc_fetestexcept_ppc (int e)
-{
- fenv_union_t u;
- u.fenv = fegetenv_register ();
- return u.l & e;
-}
-
-static __always_inline void
-libc_feholdsetround_ppc (fenv_t *e, int r)
-{
- __libc_feholdbits_ppc (e, _FPU_MASK_TRAPS_RN, r);
-}
-
-static __always_inline unsigned long long
-__libc_femergeenv_ppc (const fenv_t *envp, unsigned long long old_mask,
- unsigned long long new_mask)
-{
- fenv_union_t old, new;
-
- new.fenv = *envp;
- old.fenv = fegetenv_register ();
-
- /* Merge bits while masking unwanted bits from new and old env. */
- new.l = (old.l & old_mask) | (new.l & new_mask);
-
- /* If the old env has no enabled exceptions and the new env has any enabled
- exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put the
- hardware into "precise mode" and may cause the FPU to run slower on some
- hardware. */
- if ((old.l & _FPU_ALL_TRAPS) == 0 && (new.l & _FPU_ALL_TRAPS) != 0)
- (void) __fe_nomask_env_priv ();
-
- /* If the old env had any enabled exceptions and the new env has no enabled
- exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the
- FPU to run faster because it always takes the default action and can not
- generate SIGFPE. */
- if ((old.l & _FPU_ALL_TRAPS) != 0 && (new.l & _FPU_ALL_TRAPS) == 0)
- (void) __fe_mask_env ();
-
- /* Atomically enable and raise (if appropriate) exceptions set in `new'. */
- fesetenv_register (new.fenv);
-
- return old.l;
-}
-
-static __always_inline void
-libc_fesetenv_ppc (const fenv_t *envp)
-{
- /* Replace the entire environment. */
- __libc_femergeenv_ppc (envp, 0LL, -1LL);
-}
-
-static __always_inline void
-libc_feresetround_ppc (fenv_t *envp)
-{
- __libc_femergeenv_ppc (envp, _FPU_MASK_TRAPS_RN, _FPU_MASK_FRAC_INEX_RET_CC);
-}
-
-static __always_inline int
-libc_feupdateenv_test_ppc (fenv_t *envp, int ex)
-{
- return __libc_femergeenv_ppc (envp, _FPU_MASK_TRAPS_RN,
- _FPU_MASK_FRAC_INEX_RET_CC) & ex;
-}
-
-static __always_inline void
-libc_feupdateenv_ppc (fenv_t *e)
-{
- libc_feupdateenv_test_ppc (e, 0);
-}
-
-#define libc_feholdexceptf libc_feholdexcept_ppc
-#define libc_feholdexcept libc_feholdexcept_ppc
-#define libc_feholdexcept_setroundf libc_feholdexcept_setround_ppc
-#define libc_feholdexcept_setround libc_feholdexcept_setround_ppc
-#define libc_fetestexceptf libc_fetestexcept_ppc
-#define libc_fetestexcept libc_fetestexcept_ppc
-#define libc_fesetroundf libc_fesetround_ppc
-#define libc_fesetround libc_fesetround_ppc
-#define libc_fesetenvf libc_fesetenv_ppc
-#define libc_fesetenv libc_fesetenv_ppc
-#define libc_feupdateenv_testf libc_feupdateenv_test_ppc
-#define libc_feupdateenv_test libc_feupdateenv_test_ppc
-#define libc_feupdateenvf libc_feupdateenv_ppc
-#define libc_feupdateenv libc_feupdateenv_ppc
-#define libc_feholdsetroundf libc_feholdsetround_ppc
-#define libc_feholdsetround libc_feholdsetround_ppc
-#define libc_feresetroundf libc_feresetround_ppc
-#define libc_feresetround libc_feresetround_ppc
-
-
-/* We have support for rounding mode context. */
-#define HAVE_RM_CTX 1
-
-static __always_inline void
-libc_feholdsetround_ppc_ctx (struct rm_ctx *ctx, int r)
-{
- fenv_union_t old, new;
-
- old.fenv = fegetenv_register ();
-
- new.l = (old.l & _FPU_MASK_TRAPS_RN) | r;
-
- ctx->env = old.fenv;
- if (__glibc_unlikely (new.l != old.l))
- {
- if ((old.l & _FPU_ALL_TRAPS) != 0)
- (void) __fe_mask_env ();
- fesetenv_register (new.fenv);
- ctx->updated_status = true;
- }
- else
- ctx->updated_status = false;
-}
-
-static __always_inline void
-libc_fesetenv_ppc_ctx (struct rm_ctx *ctx)
-{
- libc_fesetenv_ppc (&ctx->env);
-}
-
-static __always_inline void
-libc_feupdateenv_ppc_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- libc_feresetround_ppc (&ctx->env);
-}
-
-static __always_inline void
-libc_feresetround_ppc_ctx (struct rm_ctx *ctx)
-{
- if (__glibc_unlikely (ctx->updated_status))
- libc_feresetround_ppc (&ctx->env);
-}
-
-#define libc_fesetenv_ctx libc_fesetenv_ppc_ctx
-#define libc_fesetenvf_ctx libc_fesetenv_ppc_ctx
-#define libc_fesetenvl_ctx libc_fesetenv_ppc_ctx
-#define libc_feholdsetround_ctx libc_feholdsetround_ppc_ctx
-#define libc_feholdsetroundf_ctx libc_feholdsetround_ppc_ctx
-#define libc_feholdsetroundl_ctx libc_feholdsetround_ppc_ctx
-#define libc_feresetround_ctx libc_feresetround_ppc_ctx
-#define libc_feresetroundf_ctx libc_feresetround_ppc_ctx
-#define libc_feresetroundl_ctx libc_feresetround_ppc_ctx
-#define libc_feupdateenv_ctx libc_feupdateenv_ppc_ctx
-#define libc_feupdateenvf_ctx libc_feupdateenv_ppc_ctx
-#define libc_feupdateenvl_ctx libc_feupdateenv_ppc_ctx
-
-#endif
diff --git a/sysdeps/powerpc/fpu/fesetenv.c b/sysdeps/powerpc/fpu/fesetenv.c
deleted file mode 100644
index 7208ab455a..0000000000
--- a/sysdeps/powerpc/fpu/fesetenv.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Install given floating-point environment.
- Copyright (C) 1997-2017 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_libc.h>
-#include <fpu_control.h>
-
-#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM)
-
-int
-__fesetenv (const fenv_t *envp)
-{
- fenv_union_t old, new;
-
- /* get the currently set exceptions. */
- new.fenv = *envp;
- old.fenv = fegetenv_register ();
- if (old.l == new.l)
- return 0;
-
- /* If the old env has no enabled exceptions and the new env has any enabled
- exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put the
- hardware into "precise mode" and may cause the FPU to run slower on some
- hardware. */
- if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0)
- (void) __fe_nomask_env_priv ();
-
- /* If the old env had any enabled exceptions and the new env has no enabled
- exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the
- FPU to run faster because it always takes the default action and can not
- generate SIGFPE. */
- if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0)
- (void)__fe_mask_env ();
-
- fesetenv_register (*envp);
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fesetenv, __old_fesetenv)
-compat_symbol (libm, __old_fesetenv, fesetenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__fesetenv)
-libm_hidden_ver (__fesetenv, fesetenv)
-versioned_symbol (libm, __fesetenv, fesetenv, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fesetexcept.c b/sysdeps/powerpc/fpu/fesetexcept.c
deleted file mode 100644
index 47ea8e499d..0000000000
--- a/sysdeps/powerpc/fpu/fesetexcept.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Set given exception flags. PowerPC version.
- Copyright (C) 2016-2017 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_libc.h>
-
-int
-fesetexcept (int excepts)
-{
- fenv_union_t u, n;
-
- u.fenv = fegetenv_register ();
- n.l = (u.l
- | (excepts & FPSCR_STICKY_BITS)
- /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */
- | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
- & FE_INVALID_SOFTWARE));
- if (n.l != u.l)
- {
- fesetenv_register (n.fenv);
-
- /* Deal with FE_INVALID_SOFTWARE not being implemented on some chips. */
- if (excepts & FE_INVALID)
- feraiseexcept (FE_INVALID);
- }
-
- return 0;
-}
diff --git a/sysdeps/powerpc/fpu/fesetmode.c b/sysdeps/powerpc/fpu/fesetmode.c
deleted file mode 100644
index 794f762898..0000000000
--- a/sysdeps/powerpc/fpu/fesetmode.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Install given floating-point control modes. PowerPC version.
- Copyright (C) 2016-2017 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_libc.h>
-#include <fpu_control.h>
-
-#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM \
- | _FPU_MASK_XM | _FPU_MASK_IM)
-
-#define FPU_STATUS 0xbffff700ULL
-
-int
-fesetmode (const femode_t *modep)
-{
- fenv_union_t old, new;
-
- /* Logic regarding enabled exceptions as in fesetenv. */
-
- new.fenv = *modep;
- old.fenv = fegetenv_register ();
- new.l = (new.l & ~FPU_STATUS) | (old.l & FPU_STATUS);
-
- if (old.l == new.l)
- return 0;
-
- if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0)
- (void) __fe_nomask_env_priv ();
-
- if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0)
- (void) __fe_mask_env ();
-
- fesetenv_register (new.fenv);
- return 0;
-}
diff --git a/sysdeps/powerpc/fpu/fesetround.c b/sysdeps/powerpc/fpu/fesetround.c
deleted file mode 100644
index a041f1add9..0000000000
--- a/sysdeps/powerpc/fpu/fesetround.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Set current rounding direction.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- 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_libc.h>
-
-#undef fesetround
-int
-__fesetround (int round)
-{
- if ((unsigned int) round > 3)
- return 1;
- else
- return __fesetround_inline(round);
-}
-libm_hidden_def (__fesetround)
-weak_alias (__fesetround, fesetround)
-libm_hidden_weak (fesetround)
diff --git a/sysdeps/powerpc/fpu/feupdateenv.c b/sysdeps/powerpc/fpu/feupdateenv.c
deleted file mode 100644
index 551cc1734d..0000000000
--- a/sysdeps/powerpc/fpu/feupdateenv.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Install given floating-point environment and raise exceptions.
- Copyright (C) 1997-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
-
- 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_libc.h>
-#include <fpu_control.h>
-
-#define _FPU_MASK_ALL (_FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM | _FPU_MASK_XM | _FPU_MASK_IM)
-
-int
-__feupdateenv (const fenv_t *envp)
-{
- fenv_union_t old, new;
-
- /* Save the currently set exceptions. */
- new.fenv = *envp;
- old.fenv = fegetenv_register ();
-
- /* Restore rounding mode and exception enable from *envp and merge
- exceptions. Leave fraction rounded/inexact and FP result/CC bits
- unchanged. */
- new.l = (old.l & 0xffffffff1fffff00LL) | (new.l & 0x1ff80fff);
-
- /* If the old env has no enabled exceptions and the new env has any enabled
- exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits. This will put
- the hardware into "precise mode" and may cause the FPU to run slower on
- some hardware. */
- if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0)
- (void) __fe_nomask_env_priv ();
-
- /* If the old env had any enabled exceptions and the new env has no enabled
- exceptions, then mask SIGFPE in the MSR FE0/FE1 bits. This may allow the
- FPU to run faster because it always takes the default action and can not
- generate SIGFPE. */
- if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0)
- (void)__fe_mask_env ();
-
- /* Atomically enable and raise (if appropriate) exceptions set in `new'. */
- fesetenv_register (new.fenv);
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feupdateenv, __old_feupdateenv)
-compat_symbol (libm, __old_feupdateenv, feupdateenv, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__feupdateenv)
-libm_hidden_ver (__feupdateenv, feupdateenv)
-versioned_symbol (libm, __feupdateenv, feupdateenv, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fgetexcptflg.c b/sysdeps/powerpc/fpu/fgetexcptflg.c
deleted file mode 100644
index a11b8f3323..0000000000
--- a/sysdeps/powerpc/fpu/fgetexcptflg.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Store current representation for exceptions.
- Copyright (C) 1997-2017 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_libc.h>
-
-int
-__fegetexceptflag (fexcept_t *flagp, int excepts)
-{
- fenv_union_t u;
-
- /* Get the current state. */
- u.fenv = fegetenv_register ();
-
- /* Return (all of) it. */
- *flagp = u.l & excepts & FE_ALL_EXCEPT;
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fegetexceptflag, __old_fegetexceptflag)
-compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
-#endif
-
-versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h b/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h
deleted file mode 100644
index 17ac1d2c83..0000000000
--- a/sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Fix for missing "invalid" exceptions from floating-point
- comparisons. PowerPC version.
- Copyright (C) 2016-2017 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/>. */
-
-#ifndef FIX_FP_INT_COMPARE_INVALID_H
-#define FIX_FP_INT_COMPARE_INVALID_H 1
-
-/* As of GCC 5, comparisons use unordered comparison instructions when
- they should use ordered comparisons
- <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58684>. */
-#define FIX_COMPARE_INVALID 1
-
-#endif /* fix-fp-int-compare-invalid.h */
diff --git a/sysdeps/powerpc/fpu/fraiseexcpt.c b/sysdeps/powerpc/fpu/fraiseexcpt.c
deleted file mode 100644
index 05f5cb6309..0000000000
--- a/sysdeps/powerpc/fpu/fraiseexcpt.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Raise given exceptions.
- Copyright (C) 1997-2017 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_libc.h>
-
-#undef feraiseexcept
-int
-__feraiseexcept (int excepts)
-{
- fenv_union_t u;
-
- /* Raise exceptions represented by EXCEPTS. It is the responsibility of
- the OS to ensure that if multiple exceptions occur they are fed back
- to this process in the proper way; this can happen in hardware,
- anyway (in particular, inexact with overflow or underflow). */
-
- /* Get the current state. */
- u.fenv = fegetenv_register ();
-
- /* Add the exceptions */
- u.l = (u.l
- | (excepts & FPSCR_STICKY_BITS)
- /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */
- | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
- & FE_INVALID_SOFTWARE));
-
- /* Store the new status word (along with the rest of the environment),
- triggering any appropriate exceptions. */
- fesetenv_register (u.fenv);
-
- if ((excepts & FE_INVALID))
- {
- /* For some reason, some PowerPC chips (the 601, in particular)
- don't have FE_INVALID_SOFTWARE implemented. Detect this
- case and raise FE_INVALID_SNAN instead. */
- u.fenv = fegetenv_register ();
- if ((u.l & FE_INVALID) == 0)
- set_fpscr_bit (FPSCR_VXSNAN);
- }
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__feraiseexcept, __old_feraiseexcept)
-compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1);
-#endif
-
-libm_hidden_def (__feraiseexcept)
-libm_hidden_ver (__feraiseexcept, feraiseexcept)
-versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/fsetexcptflg.c b/sysdeps/powerpc/fpu/fsetexcptflg.c
deleted file mode 100644
index d5c0963688..0000000000
--- a/sysdeps/powerpc/fpu/fsetexcptflg.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Set floating-point environment exception handling.
- Copyright (C) 1997-2017 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_libc.h>
-
-int
-__fesetexceptflag (const fexcept_t *flagp, int excepts)
-{
- fenv_union_t u, n;
- fexcept_t flag;
-
- /* Get the current state. */
- u.fenv = fegetenv_register ();
-
- /* Ignore exceptions not listed in 'excepts'. */
- flag = *flagp & excepts;
-
- /* Replace the exception status */
- int excepts_mask = FPSCR_STICKY_BITS & excepts;
- if ((excepts & FE_INVALID) != 0)
- excepts_mask |= FE_ALL_INVALID;
- n.l = ((u.l & ~excepts_mask)
- | (flag & FPSCR_STICKY_BITS)
- /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */
- | (flag >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
- & FE_INVALID_SOFTWARE));
-
- /* Store the new status word (along with the rest of the environment).
- This may cause floating-point exceptions if the restored state
- requests it. */
- if (n.l != u.l)
- fesetenv_register (n.fenv);
-
- /* Deal with FE_INVALID_SOFTWARE not being implemented on some chips. */
- if (flag & FE_INVALID)
- feraiseexcept(FE_INVALID);
-
- /* Success. */
- return 0;
-}
-
-#include <shlib-compat.h>
-#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__fesetexceptflag, __old_fesetexceptflag)
-compat_symbol (libm, __old_fesetexceptflag, fesetexceptflag, GLIBC_2_1);
-#endif
-
-versioned_symbol (libm, __fesetexceptflag, fesetexceptflag, GLIBC_2_2);
diff --git a/sysdeps/powerpc/fpu/ftestexcept.c b/sysdeps/powerpc/fpu/ftestexcept.c
deleted file mode 100644
index 8f2ecad509..0000000000
--- a/sysdeps/powerpc/fpu/ftestexcept.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Test exception in current environment.
- Copyright (C) 1997-2017 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_libc.h>
-
-int
-fetestexcept (int excepts)
-{
- fenv_union_t u;
-
- /* Get the current state. */
- u.fenv = fegetenv_register ();
-
- /* The FE_INVALID bit is dealt with correctly by the hardware, so we can
- just: */
- return u.l & excepts;
-}
-libm_hidden_def (fetestexcept)
diff --git a/sysdeps/powerpc/fpu/k_cosf.c b/sysdeps/powerpc/fpu/k_cosf.c
deleted file mode 100644
index b9e31dc64d..0000000000
--- a/sysdeps/powerpc/fpu/k_cosf.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* k_cosf.c -- float version of k_cos.c
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-#include <fenv.h>
-#include <math_private.h>
-
-static const float twom27 = 7.4505806e-09;
-static const float dot3 = 3.0000001e-01;
-static const float dot78125 = 7.8125000e-01;
-
-static const float one = 1.0000000000e+00;
-static const float C1 = 4.1666667908e-02;
-static const float C2 = -1.3888889225e-03;
-static const float C3 = 2.4801587642e-05;
-static const float C4 = -2.7557314297e-07;
-static const float C5 = 2.0875723372e-09;
-static const float C6 = -1.1359647598e-11;
-
-float
-__kernel_cosf (float x, float y)
-{
- float a, hz, z, r, qx;
- float ix;
- ix = __builtin_fabsf (x);
- if (ix < twom27)
- { /* |x| < 2**-27 */
- __feraiseexcept (FE_INEXACT);
- return one;
- }
- z = x * x;
- r = z * (C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6)))));
- if (ix < dot3) /* if |x| < 0.3 */
- return one - ((float) 0.5 * z - (z * r - x * y));
- else
- {
- if (ix > dot78125)
- { /* x > 0.78125 */
- qx = (float) 0.28125;
- }
- else
- {
- qx = ix / 4.0;
- }
- hz = (float) 0.5 *z - qx;
- a = one - qx;
- return a - (hz - (z * r - x * y));
- }
-}
diff --git a/sysdeps/powerpc/fpu/k_rem_pio2f.c b/sysdeps/powerpc/fpu/k_rem_pio2f.c
deleted file mode 100644
index 04ed62055a..0000000000
--- a/sysdeps/powerpc/fpu/k_rem_pio2f.c
+++ /dev/null
@@ -1,273 +0,0 @@
-/* k_rem_pio2f.c -- float version of e_rem_pio2.c
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <math.h>
-
-#include <math_private.h>
-#include "s_float_bitwise.h"
-
-
-static const float two_over_pi[] = {
- 1.62000000e+02, 2.49000000e+02, 1.31000000e+02, 1.10000000e+02,
- 7.80000000e+01, 6.80000000e+01, 2.10000000e+01, 4.10000000e+01,
- 2.52000000e+02, 3.90000000e+01, 8.70000000e+01, 2.09000000e+02,
- 2.45000000e+02, 5.20000000e+01, 2.21000000e+02, 1.92000000e+02,
- 2.19000000e+02, 9.80000000e+01, 1.49000000e+02, 1.53000000e+02,
- 6.00000000e+01, 6.70000000e+01, 1.44000000e+02, 6.50000000e+01,
- 2.54000000e+02, 8.10000000e+01, 9.90000000e+01, 1.71000000e+02,
- 2.22000000e+02, 1.87000000e+02, 1.97000000e+02, 9.70000000e+01,
- 1.83000000e+02, 3.60000000e+01, 1.10000000e+02, 5.80000000e+01,
- 6.60000000e+01, 7.70000000e+01, 2.10000000e+02, 2.24000000e+02,
- 6.00000000e+00, 7.30000000e+01, 4.60000000e+01, 2.34000000e+02,
- 9.00000000e+00, 2.09000000e+02, 1.46000000e+02, 2.80000000e+01,
- 2.54000000e+02, 2.90000000e+01, 2.35000000e+02, 2.80000000e+01,
- 1.77000000e+02, 4.10000000e+01, 1.67000000e+02, 6.20000000e+01,
- 2.32000000e+02, 1.30000000e+02, 5.30000000e+01, 2.45000000e+02,
- 4.60000000e+01, 1.87000000e+02, 6.80000000e+01, 1.32000000e+02,
- 2.33000000e+02, 1.56000000e+02, 1.12000000e+02, 3.80000000e+01,
- 1.80000000e+02, 9.50000000e+01, 1.26000000e+02, 6.50000000e+01,
- 5.70000000e+01, 1.45000000e+02, 2.14000000e+02, 5.70000000e+01,
- 1.31000000e+02, 8.30000000e+01, 5.70000000e+01, 2.44000000e+02,
- 1.56000000e+02, 1.32000000e+02, 9.50000000e+01, 1.39000000e+02,
- 1.89000000e+02, 2.49000000e+02, 4.00000000e+01, 5.90000000e+01,
- 3.10000000e+01, 2.48000000e+02, 1.51000000e+02, 2.55000000e+02,
- 2.22000000e+02, 5.00000000e+00, 1.52000000e+02, 1.50000000e+01,
- 2.39000000e+02, 4.70000000e+01, 1.70000000e+01, 1.39000000e+02,
- 9.00000000e+01, 1.00000000e+01, 1.09000000e+02, 3.10000000e+01,
- 1.09000000e+02, 5.40000000e+01, 1.26000000e+02, 2.07000000e+02,
- 3.90000000e+01, 2.03000000e+02, 9.00000000e+00, 1.83000000e+02,
- 7.90000000e+01, 7.00000000e+01, 6.30000000e+01, 1.02000000e+02,
- 1.58000000e+02, 9.50000000e+01, 2.34000000e+02, 4.50000000e+01,
- 1.17000000e+02, 3.90000000e+01, 1.86000000e+02, 1.99000000e+02,
- 2.35000000e+02, 2.29000000e+02, 2.41000000e+02, 1.23000000e+02,
- 6.10000000e+01, 7.00000000e+00, 5.70000000e+01, 2.47000000e+02,
- 1.38000000e+02, 8.20000000e+01, 1.46000000e+02, 2.34000000e+02,
- 1.07000000e+02, 2.51000000e+02, 9.50000000e+01, 1.77000000e+02,
- 3.10000000e+01, 1.41000000e+02, 9.30000000e+01, 8.00000000e+00,
- 8.60000000e+01, 3.00000000e+00, 4.80000000e+01, 7.00000000e+01,
- 2.52000000e+02, 1.23000000e+02, 1.07000000e+02, 1.71000000e+02,
- 2.40000000e+02, 2.07000000e+02, 1.88000000e+02, 3.20000000e+01,
- 1.54000000e+02, 2.44000000e+02, 5.40000000e+01, 2.90000000e+01,
- 1.69000000e+02, 2.27000000e+02, 1.45000000e+02, 9.70000000e+01,
- 9.40000000e+01, 2.30000000e+02, 2.70000000e+01, 8.00000000e+00,
- 1.01000000e+02, 1.53000000e+02, 1.33000000e+02, 9.50000000e+01,
- 2.00000000e+01, 1.60000000e+02, 1.04000000e+02, 6.40000000e+01,
- 1.41000000e+02, 2.55000000e+02, 2.16000000e+02, 1.28000000e+02,
- 7.70000000e+01, 1.15000000e+02, 3.90000000e+01, 4.90000000e+01,
- 6.00000000e+00, 6.00000000e+00, 2.10000000e+01, 8.60000000e+01,
- 2.02000000e+02, 1.15000000e+02, 1.68000000e+02, 2.01000000e+02,
- 9.60000000e+01, 2.26000000e+02, 1.23000000e+02, 1.92000000e+02,
- 1.40000000e+02, 1.07000000e+02
-};
-
-
-static const float PIo2[] = {
- 1.5703125000e+00, /* 0x3fc90000 */
- 4.5776367188e-04, /* 0x39f00000 */
- 2.5987625122e-05, /* 0x37da0000 */
- 7.5437128544e-08, /* 0x33a20000 */
- 6.0026650317e-11, /* 0x2e840000 */
- 7.3896444519e-13, /* 0x2b500000 */
- 5.3845816694e-15, /* 0x27c20000 */
- 5.6378512969e-18, /* 0x22d00000 */
- 8.3009228831e-20, /* 0x1fc40000 */
- 3.2756352257e-22, /* 0x1bc60000 */
- 6.3331015649e-25, /* 0x17440000 */
-};
-
-
-static const float zero = 0.0000000000e+00;
-static const float one = 1.0000000000;
-static const float twon8 = 3.9062500000e-03;
-static const float two8 = 2.5600000000e+02;
-
-
-int32_t
-__fp_kernel_rem_pio2f (float *x, float *y, float e0, int32_t nx)
-{
- int32_t jz, jx, jv, jp, jk, carry, n, iq[20], i, j, k, m, q0, ih, exp;
- float z, fw, f[20], fq[20], q[20];
-
- /* initialize jk */
- jp = jk = 9;
-
- /* determine jx,jv,q0, note that 3>q0 */
- jx = nx - 1;
- exp = __float_get_exp (e0) - 127;
- jv = (exp - 3) / 8;
- if (jv < 0)
- jv = 0;
- q0 = exp - 8 * (jv + 1);
-
- /* set up f[0] to f[jx+jk] where f[jx+jk] = two_over_pi[jv+jk] */
- j = jv - jx;
- m = jx + jk;
- for (i = 0; i <= m; i++, j++)
- f[i] = (j < 0) ? zero : two_over_pi[j];
-
- /* compute q[0],q[1],...q[jk] */
- for (i = 0; i <= jk; i++)
- {
- for (j = 0, fw = 0.0; j <= jx; j++)
- fw += x[j] * f[jx + i - j];
- q[i] = fw;
- }
-
- jz = jk;
-recompute:
- /* distill q[] into iq[] reversingly */
- for (i = 0, j = jz, z = q[jz]; j > 0; i++, j--)
- {
- fw = __truncf (twon8 * z);
- iq[i] = (int32_t) (z - two8 * fw);
- z = q[j - 1] + fw;
- }
-
- /* compute n */
- z = __scalbnf (z, q0); /* actual value of z */
- z -= 8.0 * __floorf (z * 0.125); /* trim off integer >= 8 */
- n = (int32_t) z;
- z -= __truncf (z);
- ih = 0;
- if (q0 > 0)
- { /* need iq[jz-1] to determine n */
- i = (iq[jz - 1] >> (8 - q0));
- n += i;
- iq[jz - 1] -= i << (8 - q0);
- ih = iq[jz - 1] >> (7 - q0);
- }
- else if (q0 == 0)
- ih = iq[jz - 1] >> 7;
- else if (z >= 0.5)
- ih = 2;
-
- if (ih > 0)
- { /* q > 0.5 */
- n += 1;
- carry = 0;
- for (i = 0; i < jz; i++)
- { /* compute 1-q */
- j = iq[i];
- if (carry == 0)
- {
- if (j != 0)
- {
- carry = 1;
- iq[i] = 0x100 - j;
- }
- }
- else
- iq[i] = 0xff - j;
- }
- if (q0 > 0)
- { /* rare case: chance is 1 in 12 */
- switch (q0)
- {
- case 1:
- iq[jz - 1] &= 0x7f;
- break;
- case 2:
- iq[jz - 1] &= 0x3f;
- break;
- }
- }
- if (ih == 2)
- {
- z = one - z;
- if (carry != 0)
- z -= __scalbnf (one, q0);
- }
- }
-
- /* check if recomputation is needed */
- if (z == zero)
- {
- j = 0;
- for (i = jz - 1; i >= jk; i--)
- j |= iq[i];
- if (j == 0)
- { /* need recomputation */
- for (k = 1; iq[jk - k] == 0; k++); /* k = no. of terms needed */
-
- for (i = jz + 1; i <= jz + k; i++)
- { /* add q[jz+1] to q[jz+k] */
- f[jx + i] = two_over_pi[jv + i];
- for (j = 0, fw = 0.0; j <= jx; j++)
- fw += x[j] * f[jx + i - j];
- q[i] = fw;
- }
- jz += k;
- goto recompute;
- }
- }
-
- /* chop off zero terms */
- if (z == 0.0)
- {
- jz -= 1;
- q0 -= 8;
- while (iq[jz] == 0)
- {
- jz--;
- q0 -= 8;
- }
- }
- else
- { /* break z into 8-bit if necessary */
- z = __scalbnf (z, -q0);
- if (z >= two8)
- {
- fw = __truncf (twon8 * z);
- iq[jz] = (int32_t) (z - two8 * fw);
- jz += 1;
- q0 += 8;
- iq[jz] = (int32_t) fw;
- }
- else
- iq[jz] = (int32_t) z;
- }
-
- /* convert integer "bit" chunk to floating-point value */
- fw = __scalbnf (one, q0);
- for (i = jz; i >= 0; i--)
- {
- q[i] = fw * (float) iq[i];
- fw *= twon8;
- }
-
- /* compute PIo2[0,...,jp]*q[jz,...,0] */
- for (i = jz; i >= 0; i--)
- {
- for (fw = 0.0, k = 0; k <= jp && k <= jz - i; k++)
- fw += PIo2[k] * q[i + k];
- fq[jz - i] = fw;
- }
-
- /* compress fq[] into y[] */
- fw = 0.0;
- for (i = jz; i >= 0; i--)
- fw += fq[i];
- y[0] = (ih == 0) ? fw : -fw;
- fw = fq[0] - fw;
- for (i = 1; i <= jz; i++)
- fw += fq[i];
- y[1] = (ih == 0) ? fw : -fw;
-
- return n & 7;
-}
diff --git a/sysdeps/powerpc/fpu/k_sinf.c b/sysdeps/powerpc/fpu/k_sinf.c
deleted file mode 100644
index 251633dc30..0000000000
--- a/sysdeps/powerpc/fpu/k_sinf.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* k_sinf.c -- float version of k_sin.c
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <float.h>
-#include <math.h>
-#include <fenv.h>
-#include <math_private.h>
-
-
-static const float twom27 = 7.4505806000e-09;
-static const float half = 5.0000000000e-01;
-static const float S1 = -1.6666667163e-01;
-static const float S2 = 8.3333337680e-03;
-static const float S3 = -1.9841270114e-04;
-static const float S4 = 2.7557314297e-06;
-static const float S5 = -2.5050759689e-08;
-static const float S6 = 1.5896910177e-10;
-
-
-float
-__kernel_sinf (float x, float y, int iy)
-{
- float z, r, v;
- float ix;
- ix = __builtin_fabsf (x);
- if (ix < twom27)
- { /* |x| < 2**-27 */
- if (ix < FLT_MIN && ix != 0.0f)
- __feraiseexcept (FE_UNDERFLOW|FE_INEXACT);
- else
- __feraiseexcept (FE_INEXACT);
- return x;
- }
- z = x * x;
- v = z * x;
- r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6)));
- if (iy == 0)
- return x + v * (S1 + z * r);
- else
- return x - ((z * (half * y - v * r) - y) - v * S1);
-}
diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
deleted file mode 100644
index 72eb2b1e5a..0000000000
--- a/sysdeps/powerpc/fpu/libm-test-ulps
+++ /dev/null
@@ -1,2342 +0,0 @@
-# Begin of automatic generation
-
-# Maximal error of functions:
-Function: "acos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "acos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "acos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "acos_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "acosh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "acosh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "acosh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "acosh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 4
-
-Function: "asin":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "asin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "asin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "asin_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "asinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "asinh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "asinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "asinh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 7
-ldouble: 7
-
-Function: "atan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan2":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "atan2_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "atan2_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: "atan2_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "atan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "atan_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "atan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "atanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "atanh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: "atanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "atanh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "cabs":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_downward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_towardzero":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cabs_upward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cacos":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "cacos":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cacos_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "cacos_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "cacos_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "cacos_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "cacos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "cacos_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-ildouble: 13
-ldouble: 13
-
-Function: Real part of "cacosh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "cacosh_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "cacosh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "cacosh_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "cacosh_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "cacosh_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 12
-ldouble: 12
-
-Function: Imaginary part of "cacosh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 8
-ldouble: 8
-
-Function: "carg":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "carg_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "carg_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: "carg_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "casin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "casin":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "casin_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "casin_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "casin_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "casin_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "casin_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "casin_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-ildouble: 13
-ldouble: 13
-
-Function: Real part of "casinh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "casinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "casinh_downward":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "casinh_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "casinh_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "casinh_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "casinh_upward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-ildouble: 13
-ldouble: 13
-
-Function: Imaginary part of "casinh_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "catan_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "catan_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "catan_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "catan_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "catan_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "catan_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "catanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "catanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "catanh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "catanh_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "catanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "catanh_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "catanh_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "catanh_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: "cbrt":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cbrt_downward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-ildouble: 5
-ldouble: 5
-
-Function: "cbrt_towardzero":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "cbrt_upward":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ccos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ccos_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "ccos_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ccos_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "ccos_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccos_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ccosh_downward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ccosh_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "ccosh_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ccosh_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "ccosh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ccosh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "cexp":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "cexp":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cexp_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 11
-ldouble: 11
-
-Function: Imaginary part of "cexp_downward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 11
-ldouble: 11
-
-Function: Real part of "cexp_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 11
-ldouble: 11
-
-Function: Imaginary part of "cexp_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 11
-ldouble: 11
-
-Function: Real part of "cexp_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "cexp_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "clog":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "clog":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "clog10":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "clog10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "clog10_downward":
-double: 6
-float: 6
-idouble: 6
-ifloat: 6
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "clog10_downward":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "clog10_towardzero":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-ildouble: 9
-ldouble: 9
-
-Function: Imaginary part of "clog10_towardzero":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "clog10_upward":
-double: 8
-float: 5
-idouble: 8
-ifloat: 5
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "clog10_upward":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "clog_downward":
-double: 7
-float: 5
-idouble: 7
-ifloat: 5
-ildouble: 11
-ldouble: 11
-
-Function: Imaginary part of "clog_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "clog_towardzero":
-double: 7
-float: 5
-idouble: 7
-ifloat: 5
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "clog_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 7
-ldouble: 7
-
-Function: Real part of "clog_upward":
-double: 8
-float: 5
-idouble: 8
-ifloat: 5
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "clog_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "cos":
-float: 3
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "cos_downward":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "cos_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "cos_upward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: "cosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "cosh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cosh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "cosh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cpow":
-double: 2
-float: 5
-idouble: 2
-ifloat: 5
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "cpow":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "cpow_downward":
-double: 4
-float: 8
-idouble: 4
-ifloat: 8
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "cpow_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "cpow_towardzero":
-double: 4
-float: 8
-idouble: 4
-ifloat: 8
-ildouble: 8
-ldouble: 8
-
-Function: Imaginary part of "cpow_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: Real part of "cpow_upward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "cpow_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Imaginary part of "csin":
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csin_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "csin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "csin_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "csin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "csin_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csin_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "csinh_downward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "csinh_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "csinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "csinh_towardzero":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "csinh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "csinh_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "csqrt":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Imaginary part of "csqrt":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "csqrt_downward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-ildouble: 4
-ldouble: 4
-
-Function: Imaginary part of "csqrt_downward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "csqrt_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Imaginary part of "csqrt_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 5
-ldouble: 5
-
-Function: Real part of "csqrt_upward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-ildouble: 12
-ldouble: 12
-
-Function: Imaginary part of "csqrt_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: Real part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ctan":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctan_downward":
-double: 6
-float: 5
-idouble: 6
-ifloat: 5
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ctan_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: Real part of "ctan_towardzero":
-double: 5
-float: 3
-idouble: 5
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: Imaginary part of "ctan_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 13
-ldouble: 13
-
-Function: Real part of "ctan_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 7
-ldouble: 7
-
-Function: Imaginary part of "ctan_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 10
-ldouble: 10
-
-Function: Real part of "ctanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: Imaginary part of "ctanh":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: Real part of "ctanh_downward":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: Imaginary part of "ctanh_downward":
-double: 6
-float: 5
-idouble: 6
-ifloat: 5
-ildouble: 6
-ldouble: 6
-
-Function: Real part of "ctanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 13
-ldouble: 13
-
-Function: Imaginary part of "ctanh_towardzero":
-double: 5
-float: 2
-idouble: 5
-ifloat: 2
-ildouble: 10
-ldouble: 10
-
-Function: Real part of "ctanh_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 10
-ldouble: 10
-
-Function: Imaginary part of "ctanh_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 10
-ldouble: 10
-
-Function: "erf":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "erf_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "erf_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "erf_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "erfc":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "erfc_downward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 10
-ldouble: 10
-
-Function: "erfc_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 9
-ldouble: 9
-
-Function: "erfc_upward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 7
-ldouble: 7
-
-Function: "exp":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp10":
-double: 2
-idouble: 2
-ildouble: 1
-ldouble: 1
-
-Function: "exp10_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: "exp10_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: "exp10_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "exp2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp2_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "exp2_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp2_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp_downward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp_towardzero":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "exp_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "expm1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "expm1_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 3
-ldouble: 3
-
-Function: "expm1_towardzero":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "expm1_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 6
-ldouble: 6
-
-Function: "fma":
-ildouble: 1
-ldouble: 1
-
-Function: "fma_downward":
-ildouble: 1
-ldouble: 1
-
-Function: "fma_towardzero":
-ildouble: 2
-ldouble: 2
-
-Function: "fma_upward":
-ildouble: 3
-ldouble: 3
-
-Function: "fmod":
-ildouble: 1
-ldouble: 1
-
-Function: "fmod_downward":
-ildouble: 1
-ldouble: 1
-
-Function: "fmod_towardzero":
-ildouble: 1
-ldouble: 1
-
-Function: "fmod_upward":
-ildouble: 1
-ldouble: 1
-
-Function: "gamma":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 3
-ldouble: 3
-
-Function: "gamma_downward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 15
-ldouble: 15
-
-Function: "gamma_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 16
-ldouble: 16
-
-Function: "gamma_upward":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 11
-ldouble: 11
-
-Function: "hypot":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "hypot_downward":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "hypot_towardzero":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: "hypot_upward":
-double: 1
-idouble: 1
-ildouble: 3
-ldouble: 3
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "j0_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 11
-ldouble: 11
-
-Function: "j0_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 8
-ldouble: 8
-
-Function: "j0_upward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "j1_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "j1_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "j1_upward":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 6
-ldouble: 6
-
-Function: "jn":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 4
-ldouble: 4
-
-Function: "jn_downward":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 7
-ldouble: 7
-
-Function: "jn_towardzero":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 7
-ldouble: 7
-
-Function: "jn_upward":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "lgamma":
-double: 3
-float: 4
-idouble: 3
-ifloat: 4
-ildouble: 3
-ldouble: 3
-
-Function: "lgamma_downward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 15
-ldouble: 15
-
-Function: "lgamma_towardzero":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 16
-ldouble: 16
-
-Function: "lgamma_upward":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-ildouble: 11
-ldouble: 11
-
-Function: "log":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log10_downward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 1
-ldouble: 1
-
-Function: "log10_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "log10_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log1p":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log1p_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "log1p_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "log1p_upward":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "log2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log2_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 2
-ldouble: 2
-
-Function: "log2_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "log2_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "log_downward":
-float: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log_towardzero":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "log_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "nextafter_downward":
-ildouble: 1
-ldouble: 1
-
-Function: "nextafter_upward":
-ildouble: 1
-ldouble: 1
-
-Function: "pow":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow10":
-double: 2
-idouble: 2
-ildouble: 1
-ldouble: 1
-
-Function: "pow10_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: "pow10_towardzero":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 9
-ldouble: 9
-
-Function: "pow10_upward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "pow_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "sin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-
-Function: "sin_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 5
-ldouble: 5
-
-Function: "sincos":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sincos_downward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "sincos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 7
-ldouble: 7
-
-Function: "sincos_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "sinh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 3
-ldouble: 3
-
-Function: "sinh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: "sinh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 6
-ldouble: 6
-
-Function: "sinh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: "sqrt":
-ildouble: 1
-ldouble: 1
-
-Function: "sqrt_downward":
-ildouble: 1
-ldouble: 1
-
-Function: "sqrt_towardzero":
-ildouble: 1
-ldouble: 1
-
-Function: "sqrt_upward":
-ildouble: 1
-ldouble: 1
-
-Function: "tan":
-float: 3
-ifloat: 3
-ildouble: 2
-ldouble: 2
-
-Function: "tan_downward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: "tan_towardzero":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 2
-ldouble: 2
-
-Function: "tan_upward":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-ildouble: 3
-ldouble: 3
-
-Function: "tanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "tanh_downward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 4
-ldouble: 4
-
-Function: "tanh_towardzero":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-ildouble: 4
-ldouble: 4
-
-Function: "tanh_upward":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 6
-ldouble: 6
-
-Function: "tgamma":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "tgamma_downward":
-double: 5
-float: 5
-idouble: 5
-ifloat: 5
-ildouble: 6
-ldouble: 6
-
-Function: "tgamma_towardzero":
-double: 5
-float: 4
-idouble: 5
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "tgamma_upward":
-double: 4
-float: 4
-idouble: 4
-ifloat: 4
-ildouble: 5
-ldouble: 5
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "y0_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 10
-ldouble: 10
-
-Function: "y0_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: "y0_upward":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-ildouble: 9
-ldouble: 9
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "y1_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 7
-ldouble: 7
-
-Function: "y1_towardzero":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 9
-ldouble: 9
-
-Function: "y1_upward":
-double: 5
-float: 2
-idouble: 5
-ifloat: 2
-ildouble: 9
-ldouble: 9
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 2
-ldouble: 2
-
-Function: "yn_downward":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-ildouble: 10
-ldouble: 10
-
-Function: "yn_towardzero":
-double: 3
-float: 3
-idouble: 3
-ifloat: 3
-ildouble: 8
-ldouble: 8
-
-Function: "yn_upward":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-ildouble: 9
-ldouble: 9
-
-# end of automatic generation
diff --git a/sysdeps/powerpc/fpu/libm-test-ulps-name b/sysdeps/powerpc/fpu/libm-test-ulps-name
deleted file mode 100644
index 8c5f7fa2ab..0000000000
--- a/sysdeps/powerpc/fpu/libm-test-ulps-name
+++ /dev/null
@@ -1 +0,0 @@
-PowerPC
diff --git a/sysdeps/powerpc/fpu/math_ldbl.h b/sysdeps/powerpc/fpu/math_ldbl.h
deleted file mode 100644
index 05f51217bf..0000000000
--- a/sysdeps/powerpc/fpu/math_ldbl.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Manipulation of the bit representation of 'long double' quantities.
- Copyright (C) 2006-2017 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/>. */
-
-#ifndef _MATH_LDBL_H_PPC_
-#define _MATH_LDBL_H_PPC_ 1
-
-/* GCC does not optimize the default ldbl_pack code to not spill register
- in the stack. The following optimization tells gcc that pack/unpack
- is really a nop. We use fr1/fr2 because those are the regs used to
- pass/return a single long double arg. */
-static inline long double
-ldbl_pack_ppc (double a, double aa)
-{
- register long double x __asm__ ("fr1");
- register double xh __asm__ ("fr1");
- register double xl __asm__ ("fr2");
- xh = a;
- xl = aa;
- __asm__ ("" : "=f" (x) : "f" (xh), "f" (xl));
- return x;
-}
-
-static inline void
-ldbl_unpack_ppc (long double l, double *a, double *aa)
-{
- register long double x __asm__ ("fr1");
- register double xh __asm__ ("fr1");
- register double xl __asm__ ("fr2");
- x = l;
- __asm__ ("" : "=f" (xh), "=f" (xl) : "f" (x));
- *a = xh;
- *aa = xl;
-}
-
-#define ldbl_pack ldbl_pack_ppc
-#define ldbl_unpack ldbl_unpack_ppc
-
-#include <sysdeps/ieee754/ldbl-128ibm/math_ldbl.h>
-
-#endif /* math_ldbl.h */
diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h
deleted file mode 100644
index 3c71275392..0000000000
--- a/sysdeps/powerpc/fpu/math_private.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Private inline math functions for powerpc.
- Copyright (C) 2006-2017 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/>. */
-
-#ifndef _PPC_MATH_PRIVATE_H_
-#define _PPC_MATH_PRIVATE_H_
-
-#include <sysdep.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-#include <fenv_private.h>
-#include_next <math_private.h>
-
-extern double __slow_ieee754_sqrt (double);
-extern __always_inline double
-__ieee754_sqrt (double __x)
-{
- double __z;
-
-#ifdef _ARCH_PPCSQ
- asm ("fsqrt %0,%1" : "=f" (__z) : "f" (__x));
-#else
- __z = __slow_ieee754_sqrt(__x);
-#endif
-
- return __z;
-}
-
-extern float __slow_ieee754_sqrtf (float);
-extern __always_inline float
-__ieee754_sqrtf (float __x)
-{
- float __z;
-
-#ifdef _ARCH_PPCSQ
- asm ("fsqrts %0,%1" : "=f" (__z) : "f" (__x));
-#else
- __z = __slow_ieee754_sqrtf(__x);
-#endif
-
- return __z;
-}
-
-#if defined _ARCH_PWR5X
-
-# ifndef __round
-# define __round(x) \
- ({ double __z; \
- __asm __volatile ( \
- " frin %0,%1\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-# ifndef __roundf
-# define __roundf(x) \
- ({ float __z; \
- __asm __volatile ( \
- " frin %0,%1\n" \
- " frsp %0,%0\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-
-# ifndef __trunc
-# define __trunc(x) \
- ({ double __z; \
- __asm __volatile ( \
- " friz %0,%1\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-# ifndef __truncf
-# define __truncf(x) \
- ({ float __z; \
- __asm __volatile ( \
- " friz %0,%1\n" \
- " frsp %0,%0\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-
-# ifndef __ceil
-# define __ceil(x) \
- ({ double __z; \
- __asm __volatile ( \
- " frip %0,%1\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-# ifndef __ceilf
-# define __ceilf(x) \
- ({ float __z; \
- __asm __volatile ( \
- " frip %0,%1\n" \
- " frsp %0,%0\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-
-# ifndef __floor
-# define __floor(x) \
- ({ double __z; \
- __asm __volatile ( \
- " frim %0,%1\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-# ifndef __floorf
-# define __floorf(x) \
- ({ float __z; \
- __asm __volatile ( \
- " frim %0,%1\n" \
- " frsp %0,%0\n" \
- : "=f" (__z) \
- : "f" (x)); \
- __z; })
-# endif
-
-#endif /* defined _ARCH_PWR5X */
-
-#endif /* _PPC_MATH_PRIVATE_H_ */
diff --git a/sysdeps/powerpc/fpu/s_cosf.c b/sysdeps/powerpc/fpu/s_cosf.c
deleted file mode 100644
index 772b138ac3..0000000000
--- a/sysdeps/powerpc/fpu/s_cosf.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* s_cosf.c -- float version of s_cos.c.
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <math.h>
-#include <math_private.h>
-
-static const float pio4 = 7.8539801e-1;
-
-float
-__cosf (float x)
-{
- float y[2], z = 0.0;
- float ix;
- int32_t n;
-
- ix = __builtin_fabsf (x);
-
- /* |x| ~< pi/4 */
- if (ix <= pio4)
- {
- return __kernel_cosf (x, z);
- /* cos(Inf or NaN) is NaN */
- }
- else if (isnanf (ix))
- {
- return x - x;
- }
- else if (isinff (ix))
- {
- __set_errno (EDOM);
- return x - x;
- }
-
- /* argument reduction needed */
- else
- {
- n = __ieee754_rem_pio2f (x, y);
- switch (n & 3)
- {
- case 0:
- return __kernel_cosf (y[0], y[1]);
- case 1:
- return -__kernel_sinf (y[0], y[1], 1);
- case 2:
- return -__kernel_cosf (y[0], y[1]);
- default:
- return __kernel_sinf (y[0], y[1], 1);
- }
- }
-}
-
-weak_alias (__cosf, cosf)
diff --git a/sysdeps/powerpc/fpu/s_fabs.S b/sysdeps/powerpc/fpu/s_fabs.S
deleted file mode 100644
index 87dc82eb28..0000000000
--- a/sysdeps/powerpc/fpu/s_fabs.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Floating-point absolute value. PowerPC version.
- Copyright (C) 1997-2017 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 <sysdep.h>
-
-ENTRY(__fabs)
-/* double [f1] fabs (double [f1] x); */
- fabs fp1,fp1
- blr
-END(__fabs)
-
-weak_alias (__fabs,fabs)
-
-/* It turns out that it's safe to use this code even for single-precision. */
-strong_alias(__fabs,__fabsf)
-weak_alias (__fabs,fabsf)
-
-#ifdef NO_LONG_DOUBLE
-weak_alias (__fabs,__fabsl)
-weak_alias (__fabs,fabsl)
-#endif
diff --git a/sysdeps/powerpc/fpu/s_fabsf.S b/sysdeps/powerpc/fpu/s_fabsf.S
deleted file mode 100644
index 877c710ce8..0000000000
--- a/sysdeps/powerpc/fpu/s_fabsf.S
+++ /dev/null
@@ -1 +0,0 @@
-/* __fabsf is in s_fabs.S */
diff --git a/sysdeps/powerpc/fpu/s_float_bitwise.h b/sysdeps/powerpc/fpu/s_float_bitwise.h
deleted file mode 100644
index 8e63fb253b..0000000000
--- a/sysdeps/powerpc/fpu/s_float_bitwise.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Bitwise manipulation over float. Function prototypes.
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.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/>. */
-
-#ifndef _FLOAT_BITWISE_
-#define _FLOAT_BITWISE_ 1
-
-#include <math_private.h>
-
-/* Returns (int)(num & 0x7FFFFFF0 == value) */
-static inline int
-__float_and_test28 (float num, float value)
-{
- float ret;
-#ifdef _ARCH_PWR7
- union {
- int i;
- float f;
- } mask = { .i = 0x7ffffff0 };
- __asm__ (
- /* the 'f' constraint is used on mask because we just need
- * to compare floats, not full vector */
- "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
- );
-#else
- int32_t inum;
- GET_FLOAT_WORD(inum, num);
- inum = (inum & 0x7ffffff0);
- SET_FLOAT_WORD(ret, inum);
-#endif
- return (ret == value);
-}
-
-/* Returns (int)(num & 0x7FFFFF00 == value) */
-static inline int
-__float_and_test24 (float num, float value)
-{
- float ret;
-#ifdef _ARCH_PWR7
- union {
- int i;
- float f;
- } mask = { .i = 0x7fffff00 };
- __asm__ (
- "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
- );
-#else
- int32_t inum;
- GET_FLOAT_WORD(inum, num);
- inum = (inum & 0x7fffff00);
- SET_FLOAT_WORD(ret, inum);
-#endif
- return (ret == value);
-}
-
-/* Returns (float)(num & 0x7F800000) */
-static inline float
-__float_and8 (float num)
-{
- float ret;
-#ifdef _ARCH_PWR7
- union {
- int i;
- float f;
- } mask = { .i = 0x7f800000 };
- __asm__ (
- "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
- );
-#else
- int32_t inum;
- GET_FLOAT_WORD(inum, num);
- inum = (inum & 0x7f800000);
- SET_FLOAT_WORD(ret, inum);
-#endif
- return ret;
-}
-
-/* Returns ((int32_t)(num & 0x7F800000) >> 23) */
-static inline int32_t
-__float_get_exp (float num)
-{
- int32_t inum;
-#ifdef _ARCH_PWR7
- float ret;
- union {
- int i;
- float f;
- } mask = { .i = 0x7f800000 };
- __asm__ (
- "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
- );
- GET_FLOAT_WORD(inum, ret);
-#else
- GET_FLOAT_WORD(inum, num);
- inum = inum & 0x7f800000;
-#endif
- return inum >> 23;
-}
-
-#endif /* s_float_bitwise.h */
diff --git a/sysdeps/powerpc/fpu/s_fma.S b/sysdeps/powerpc/fpu/s_fma.S
deleted file mode 100644
index e101f374bf..0000000000
--- a/sysdeps/powerpc/fpu/s_fma.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Compute x * y + z as ternary operation. PowerPC version.
- Copyright (C) 2010-2017 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 <sysdep.h>
-
-ENTRY(__fma)
-/* double [f1] fma (double [f1] x, double [f2] y, double [f3] z); */
- fmadd fp1,fp1,fp2,fp3
- blr
-END(__fma)
-
-weak_alias (__fma,fma)
-
-#ifdef NO_LONG_DOUBLE
-weak_alias (__fma,__fmal)
-weak_alias (__fma,fmal)
-#endif
diff --git a/sysdeps/powerpc/fpu/s_fmaf.S b/sysdeps/powerpc/fpu/s_fmaf.S
deleted file mode 100644
index 49ea298707..0000000000
--- a/sysdeps/powerpc/fpu/s_fmaf.S
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Compute x * y + z as ternary operation. PowerPC version.
- Copyright (C) 2010-2017 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 <sysdep.h>
-
-ENTRY(__fmaf)
-/* float [f1] fmaf (float [f1] x, float [f2] y, float [f3] z); */
- fmadds fp1,fp1,fp2,fp3
- blr
-END(__fmaf)
-
-weak_alias (__fmaf,fmaf)
diff --git a/sysdeps/powerpc/fpu/s_isnan.c b/sysdeps/powerpc/fpu/s_isnan.c
deleted file mode 100644
index f75391fa80..0000000000
--- a/sysdeps/powerpc/fpu/s_isnan.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Return 1 if argument is a NaN, else 0.
- Copyright (C) 1997-2017 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/>. */
-
-/* Ugly kludge to avoid declarations. */
-#define __isnanf __Xisnanf
-#define isnanf Xisnanf
-#define __GI___isnanf __GI___Xisnanf
-
-#include <math.h>
-#include <math_ldbl_opt.h>
-#include <fenv_libc.h>
-
-#undef __isnanf
-#undef isnanf
-#undef __GI___isnanf
-
-
-/* The hidden_proto in include/math.h was obscured by the macro hackery. */
-__typeof (__isnan) __isnanf;
-hidden_proto (__isnanf)
-
-
-int
-__isnan (double x)
-{
- fenv_t savedstate;
- int result;
- savedstate = fegetenv_register ();
- reset_fpscr_bit (FPSCR_VE);
- result = !(x == x);
- fesetenv_register (savedstate);
- return result;
-}
-hidden_def (__isnan)
-weak_alias (__isnan, isnan)
-
-
-/* It turns out that the 'double' version will also always work for
- single-precision. */
-strong_alias (__isnan, __isnanf)
-hidden_def (__isnanf)
-weak_alias (__isnanf, isnanf)
-
-#ifdef NO_LONG_DOUBLE
-strong_alias (__isnan, __isnanl)
-weak_alias (__isnan, isnanl)
-#endif
diff --git a/sysdeps/powerpc/fpu/s_isnanf.S b/sysdeps/powerpc/fpu/s_isnanf.S
deleted file mode 100644
index fc22f678a1..0000000000
--- a/sysdeps/powerpc/fpu/s_isnanf.S
+++ /dev/null
@@ -1 +0,0 @@
-/* __isnanf is in s_isnan.c */
diff --git a/sysdeps/powerpc/fpu/s_lrintf.S b/sysdeps/powerpc/fpu/s_lrintf.S
deleted file mode 100644
index e24766535f..0000000000
--- a/sysdeps/powerpc/fpu/s_lrintf.S
+++ /dev/null
@@ -1 +0,0 @@
-/* __lrintf is in s_lrint.c */
diff --git a/sysdeps/powerpc/fpu/s_rint.c b/sysdeps/powerpc/fpu/s_rint.c
deleted file mode 100644
index a96140b2c9..0000000000
--- a/sysdeps/powerpc/fpu/s_rint.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Round a 64-bit floating point value to the nearest integer.
- Copyright (C) 1997-2017 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>
-
-double
-__rint (double x)
-{
- static const float TWO52 = 4503599627370496.0;
-
- if (fabs (x) < TWO52)
- {
- if (x > 0.0)
- {
- x += TWO52;
- x -= TWO52;
- }
- else if (x < 0.0)
- {
- x = TWO52 - x;
- x = -(x - TWO52);
- }
- }
-
- return x;
-}
-weak_alias (__rint, rint)
-#ifdef NO_LONG_DOUBLE
-strong_alias (__rint, __rintl)
-weak_alias (__rint, rintl)
-#endif
diff --git a/sysdeps/powerpc/fpu/s_rintf.c b/sysdeps/powerpc/fpu/s_rintf.c
deleted file mode 100644
index 6b16c7bec4..0000000000
--- a/sysdeps/powerpc/fpu/s_rintf.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Round a 32-bit floating point value to the nearest integer.
- Copyright (C) 1997-2017 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>
-
-float
-__rintf (float x)
-{
- static const float TWO23 = 8388608.0;
-
- if (fabsf (x) < TWO23)
- {
- if (x > 0.0)
- {
- x += TWO23;
- x -= TWO23;
- }
- else if (x < 0.0)
- {
- x = TWO23 - x;
- x = -(x - TWO23);
- }
- }
-
- return x;
-}
-weak_alias (__rintf, rintf)
diff --git a/sysdeps/powerpc/fpu/s_sinf.c b/sysdeps/powerpc/fpu/s_sinf.c
deleted file mode 100644
index 54a428e68a..0000000000
--- a/sysdeps/powerpc/fpu/s_sinf.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* s_sinf.c -- float version of s_sin.c.
- Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Adhemerval Zanella <azanella@br.ibm.com>, 2011
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If
- not, see <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <math.h>
-#include <math_private.h>
-
-static const float pio4 = 7.8539801e-1;
-
-float
-__sinf (float x)
-{
- float y[2], z = 0.0;
- float ix;
- int32_t n;
-
- ix = __builtin_fabsf (x);
-
- /* |x| ~< pi/4 */
- if (ix <= pio4)
- {
- return __kernel_sinf (x, z, 0);
- /* sin(Inf or NaN) is NaN */
- }
- else if (isnanf (ix))
- {
- return x - x;
- }
- else if (isinff (ix))
- {
- __set_errno (EDOM);
- return x - x;
- }
-
- /* argument reduction needed */
- else
- {
- n = __ieee754_rem_pio2f (x, y);
- switch (n & 3)
- {
- case 0:
- return __kernel_sinf (y[0], y[1], 1);
- case 1:
- return __kernel_cosf (y[0], y[1]);
- case 2:
- return -__kernel_sinf (y[0], y[1], 1);
- default:
- return -__kernel_cosf (y[0], y[1]);
- }
- }
-}
-
-weak_alias (__sinf, sinf)
diff --git a/sysdeps/powerpc/fpu/t_sqrt.c b/sysdeps/powerpc/fpu/t_sqrt.c
deleted file mode 100644
index 9ed7436ae6..0000000000
--- a/sysdeps/powerpc/fpu/t_sqrt.c
+++ /dev/null
@@ -1,144 +0,0 @@
-const float __t_sqrt[1024] = {
-0.7078,0.7064, 0.7092,0.7050, 0.7106,0.7037, 0.7119,0.7023, 0.7133,0.7010,
-0.7147,0.6996, 0.7160,0.6983, 0.7174,0.6970, 0.7187,0.6957, 0.7201,0.6943,
-0.7215,0.6930, 0.7228,0.6917, 0.7242,0.6905, 0.7255,0.6892, 0.7269,0.6879,
-0.7282,0.6866, 0.7295,0.6854, 0.7309,0.6841, 0.7322,0.6829, 0.7335,0.6816,
-0.7349,0.6804, 0.7362,0.6792, 0.7375,0.6779, 0.7388,0.6767, 0.7402,0.6755,
-0.7415,0.6743, 0.7428,0.6731, 0.7441,0.6719, 0.7454,0.6708, 0.7467,0.6696,
-0.7480,0.6684, 0.7493,0.6672, 0.7507,0.6661, 0.7520,0.6649, 0.7532,0.6638,
-0.7545,0.6627, 0.7558,0.6615, 0.7571,0.6604, 0.7584,0.6593, 0.7597,0.6582,
-0.7610,0.6570, 0.7623,0.6559, 0.7635,0.6548, 0.7648,0.6537, 0.7661,0.6527,
-0.7674,0.6516, 0.7686,0.6505, 0.7699,0.6494, 0.7712,0.6484, 0.7725,0.6473,
-0.7737,0.6462, 0.7750,0.6452, 0.7762,0.6441, 0.7775,0.6431, 0.7787,0.6421,
-0.7800,0.6410, 0.7812,0.6400, 0.7825,0.6390, 0.7837,0.6380, 0.7850,0.6370,
-0.7862,0.6359, 0.7875,0.6349, 0.7887,0.6339, 0.7900,0.6330, 0.7912,0.6320,
-0.7924,0.6310, 0.7937,0.6300, 0.7949,0.6290, 0.7961,0.6281, 0.7973,0.6271,
-0.7986,0.6261, 0.7998,0.6252, 0.8010,0.6242, 0.8022,0.6233, 0.8034,0.6223,
-0.8046,0.6214, 0.8059,0.6205, 0.8071,0.6195, 0.8083,0.6186, 0.8095,0.6177,
-0.8107,0.6168, 0.8119,0.6158, 0.8131,0.6149, 0.8143,0.6140, 0.8155,0.6131,
-0.8167,0.6122, 0.8179,0.6113, 0.8191,0.6104, 0.8203,0.6096, 0.8215,0.6087,
-0.8227,0.6078, 0.8238,0.6069, 0.8250,0.6060, 0.8262,0.6052, 0.8274,0.6043,
-0.8286,0.6035, 0.8297,0.6026, 0.8309,0.6017, 0.8321,0.6009, 0.8333,0.6000,
-0.8344,0.5992, 0.8356,0.5984, 0.8368,0.5975, 0.8379,0.5967, 0.8391,0.5959,
-0.8403,0.5950, 0.8414,0.5942, 0.8426,0.5934, 0.8437,0.5926, 0.8449,0.5918,
-0.8461,0.5910, 0.8472,0.5902, 0.8484,0.5894, 0.8495,0.5886, 0.8507,0.5878,
-0.8518,0.5870, 0.8530,0.5862, 0.8541,0.5854, 0.8552,0.5846, 0.8564,0.5838,
-0.8575,0.5831, 0.8587,0.5823, 0.8598,0.5815, 0.8609,0.5808, 0.8621,0.5800,
-0.8632,0.5792, 0.8643,0.5785, 0.8655,0.5777, 0.8666,0.5770, 0.8677,0.5762,
-0.8688,0.5755, 0.8700,0.5747, 0.8711,0.5740, 0.8722,0.5733, 0.8733,0.5725,
-0.8744,0.5718, 0.8756,0.5711, 0.8767,0.5703, 0.8778,0.5696, 0.8789,0.5689,
-0.8800,0.5682, 0.8811,0.5675, 0.8822,0.5667, 0.8833,0.5660, 0.8844,0.5653,
-0.8855,0.5646, 0.8866,0.5639, 0.8877,0.5632, 0.8888,0.5625, 0.8899,0.5618,
-0.8910,0.5611, 0.8921,0.5605, 0.8932,0.5598, 0.8943,0.5591, 0.8954,0.5584,
-0.8965,0.5577, 0.8976,0.5570, 0.8987,0.5564, 0.8998,0.5557, 0.9008,0.5550,
-0.9019,0.5544, 0.9030,0.5537, 0.9041,0.5530, 0.9052,0.5524, 0.9062,0.5517,
-0.9073,0.5511, 0.9084,0.5504, 0.9095,0.5498, 0.9105,0.5491, 0.9116,0.5485,
-0.9127,0.5478, 0.9138,0.5472, 0.9148,0.5465, 0.9159,0.5459, 0.9170,0.5453,
-0.9180,0.5446, 0.9191,0.5440, 0.9202,0.5434, 0.9212,0.5428, 0.9223,0.5421,
-0.9233,0.5415, 0.9244,0.5409, 0.9254,0.5403, 0.9265,0.5397, 0.9276,0.5391,
-0.9286,0.5384, 0.9297,0.5378, 0.9307,0.5372, 0.9318,0.5366, 0.9328,0.5360,
-0.9338,0.5354, 0.9349,0.5348, 0.9359,0.5342, 0.9370,0.5336, 0.9380,0.5330,
-0.9391,0.5324, 0.9401,0.5319, 0.9411,0.5313, 0.9422,0.5307, 0.9432,0.5301,
-0.9442,0.5295, 0.9453,0.5289, 0.9463,0.5284, 0.9473,0.5278, 0.9484,0.5272,
-0.9494,0.5266, 0.9504,0.5261, 0.9515,0.5255, 0.9525,0.5249, 0.9535,0.5244,
-0.9545,0.5238, 0.9556,0.5233, 0.9566,0.5227, 0.9576,0.5221, 0.9586,0.5216,
-0.9596,0.5210, 0.9607,0.5205, 0.9617,0.5199, 0.9627,0.5194, 0.9637,0.5188,
-0.9647,0.5183, 0.9657,0.5177, 0.9667,0.5172, 0.9677,0.5167, 0.9687,0.5161,
-0.9698,0.5156, 0.9708,0.5151, 0.9718,0.5145, 0.9728,0.5140, 0.9738,0.5135,
-0.9748,0.5129, 0.9758,0.5124, 0.9768,0.5119, 0.9778,0.5114, 0.9788,0.5108,
-0.9798,0.5103, 0.9808,0.5098, 0.9818,0.5093, 0.9828,0.5088, 0.9838,0.5083,
-0.9847,0.5077, 0.9857,0.5072, 0.9867,0.5067, 0.9877,0.5062, 0.9887,0.5057,
-0.9897,0.5052, 0.9907,0.5047, 0.9917,0.5042, 0.9926,0.5037, 0.9936,0.5032,
-0.9946,0.5027, 0.9956,0.5022, 0.9966,0.5017, 0.9976,0.5012, 0.9985,0.5007,
-0.9995,0.5002,
-1.0010,0.4995, 1.0029,0.4985, 1.0049,0.4976, 1.0068,0.4966, 1.0088,0.4957,
-1.0107,0.4947, 1.0126,0.4938, 1.0145,0.4928, 1.0165,0.4919, 1.0184,0.4910,
-1.0203,0.4901, 1.0222,0.4891, 1.0241,0.4882, 1.0260,0.4873, 1.0279,0.4864,
-1.0298,0.4855, 1.0317,0.4846, 1.0336,0.4837, 1.0355,0.4829, 1.0374,0.4820,
-1.0393,0.4811, 1.0411,0.4802, 1.0430,0.4794, 1.0449,0.4785, 1.0468,0.4777,
-1.0486,0.4768, 1.0505,0.4760, 1.0523,0.4751, 1.0542,0.4743, 1.0560,0.4735,
-1.0579,0.4726, 1.0597,0.4718, 1.0616,0.4710, 1.0634,0.4702, 1.0653,0.4694,
-1.0671,0.4686, 1.0689,0.4678, 1.0707,0.4670, 1.0726,0.4662, 1.0744,0.4654,
-1.0762,0.4646, 1.0780,0.4638, 1.0798,0.4630, 1.0816,0.4623, 1.0834,0.4615,
-1.0852,0.4607, 1.0870,0.4600, 1.0888,0.4592, 1.0906,0.4585, 1.0924,0.4577,
-1.0942,0.4570, 1.0960,0.4562, 1.0978,0.4555, 1.0995,0.4547, 1.1013,0.4540,
-1.1031,0.4533, 1.1049,0.4525, 1.1066,0.4518, 1.1084,0.4511, 1.1101,0.4504,
-1.1119,0.4497, 1.1137,0.4490, 1.1154,0.4483, 1.1172,0.4476, 1.1189,0.4469,
-1.1207,0.4462, 1.1224,0.4455, 1.1241,0.4448, 1.1259,0.4441, 1.1276,0.4434,
-1.1293,0.4427, 1.1311,0.4421, 1.1328,0.4414, 1.1345,0.4407, 1.1362,0.4401,
-1.1379,0.4394, 1.1397,0.4387, 1.1414,0.4381, 1.1431,0.4374, 1.1448,0.4368,
-1.1465,0.4361, 1.1482,0.4355, 1.1499,0.4348, 1.1516,0.4342, 1.1533,0.4335,
-1.1550,0.4329, 1.1567,0.4323, 1.1584,0.4316, 1.1600,0.4310, 1.1617,0.4304,
-1.1634,0.4298, 1.1651,0.4292, 1.1668,0.4285, 1.1684,0.4279, 1.1701,0.4273,
-1.1718,0.4267, 1.1734,0.4261, 1.1751,0.4255, 1.1768,0.4249, 1.1784,0.4243,
-1.1801,0.4237, 1.1817,0.4231, 1.1834,0.4225, 1.1850,0.4219, 1.1867,0.4213,
-1.1883,0.4208, 1.1900,0.4202, 1.1916,0.4196, 1.1932,0.4190, 1.1949,0.4185,
-1.1965,0.4179, 1.1981,0.4173, 1.1998,0.4167, 1.2014,0.4162, 1.2030,0.4156,
-1.2046,0.4151, 1.2063,0.4145, 1.2079,0.4139, 1.2095,0.4134, 1.2111,0.4128,
-1.2127,0.4123, 1.2143,0.4117, 1.2159,0.4112, 1.2175,0.4107, 1.2192,0.4101,
-1.2208,0.4096, 1.2224,0.4090, 1.2239,0.4085, 1.2255,0.4080, 1.2271,0.4075,
-1.2287,0.4069, 1.2303,0.4064, 1.2319,0.4059, 1.2335,0.4054, 1.2351,0.4048,
-1.2366,0.4043, 1.2382,0.4038, 1.2398,0.4033, 1.2414,0.4028, 1.2429,0.4023,
-1.2445,0.4018, 1.2461,0.4013, 1.2477,0.4008, 1.2492,0.4003, 1.2508,0.3998,
-1.2523,0.3993, 1.2539,0.3988, 1.2555,0.3983, 1.2570,0.3978, 1.2586,0.3973,
-1.2601,0.3968, 1.2617,0.3963, 1.2632,0.3958, 1.2648,0.3953, 1.2663,0.3949,
-1.2678,0.3944, 1.2694,0.3939, 1.2709,0.3934, 1.2725,0.3929, 1.2740,0.3925,
-1.2755,0.3920, 1.2771,0.3915, 1.2786,0.3911, 1.2801,0.3906, 1.2816,0.3901,
-1.2832,0.3897, 1.2847,0.3892, 1.2862,0.3887, 1.2877,0.3883, 1.2892,0.3878,
-1.2907,0.3874, 1.2923,0.3869, 1.2938,0.3865, 1.2953,0.3860, 1.2968,0.3856,
-1.2983,0.3851, 1.2998,0.3847, 1.3013,0.3842, 1.3028,0.3838, 1.3043,0.3834,
-1.3058,0.3829, 1.3073,0.3825, 1.3088,0.3820, 1.3103,0.3816, 1.3118,0.3812,
-1.3132,0.3807, 1.3147,0.3803, 1.3162,0.3799, 1.3177,0.3794, 1.3192,0.3790,
-1.3207,0.3786, 1.3221,0.3782, 1.3236,0.3778, 1.3251,0.3773, 1.3266,0.3769,
-1.3280,0.3765, 1.3295,0.3761, 1.3310,0.3757, 1.3324,0.3753, 1.3339,0.3748,
-1.3354,0.3744, 1.3368,0.3740, 1.3383,0.3736, 1.3397,0.3732, 1.3412,0.3728,
-1.3427,0.3724, 1.3441,0.3720, 1.3456,0.3716, 1.3470,0.3712, 1.3485,0.3708,
-1.3499,0.3704, 1.3514,0.3700, 1.3528,0.3696, 1.3542,0.3692, 1.3557,0.3688,
-1.3571,0.3684, 1.3586,0.3680, 1.3600,0.3676, 1.3614,0.3673, 1.3629,0.3669,
-1.3643,0.3665, 1.3657,0.3661, 1.3672,0.3657, 1.3686,0.3653, 1.3700,0.3650,
-1.3714,0.3646, 1.3729,0.3642, 1.3743,0.3638, 1.3757,0.3634, 1.3771,0.3631,
-1.3785,0.3627, 1.3800,0.3623, 1.3814,0.3620, 1.3828,0.3616, 1.3842,0.3612,
-1.3856,0.3609, 1.3870,0.3605, 1.3884,0.3601, 1.3898,0.3598, 1.3912,0.3594,
-1.3926,0.3590, 1.3940,0.3587, 1.3954,0.3583, 1.3968,0.3580, 1.3982,0.3576,
-1.3996,0.3572, 1.4010,0.3569, 1.4024,0.3565, 1.4038,0.3562, 1.4052,0.3558,
-1.4066,0.3555, 1.4080,0.3551, 1.4094,0.3548, 1.4108,0.3544, 1.4121,0.3541,
-1.4135,0.3537
-};
-
-
-/* Generated by: */
-#if 0
-#include <math.h>
-#include <stdio.h>
-#include <assert.h>
-
-int
-main(int argc, char **argv)
-{
- int i, j;
-
- printf ("const float __t_sqrt[1024] = {");
- for (i = 0; i < 2; i++)
- {
- putchar('\n');
- for (j = 0; j < 256; j++)
- {
- double mval = j/512.0 + 0.5;
- double eval = i==0 ? 1.0 : 2.0;
- double ls = sqrt(mval*eval);
- double hs = sqrt((mval+1/512.0)*eval);
- double as = (ls+hs)*0.5;
- double lx = 1/(2.0*ls);
- double hx = 1/(2.0*hs);
- double ax = (lx+hx)*0.5;
-
- printf("%.4f,%.4f%s",as,ax,
- i*j==255 ? "\n" : j % 5 == 4 ? ",\n" : ", ");
- assert((hs-ls)/as < 1/256.0);
- assert((hx-lx)/ax < 1/256.0);
- }
- }
- printf ("};\n");
- return 0;
-}
-#endif /* 0 */
diff --git a/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c b/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c
deleted file mode 100644
index 4e3f90d4d3..0000000000
--- a/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ryan S. Arnold <rsa@us.ibm.com>
- Sean Curry <spcurry@us.ibm.com>
-
- 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 <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ucontext.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <link.h>
-#include <elf.h>
-#include <fpu_control.h>
-#include <sys/auxv.h>
-
-static ucontext_t ctx[3];
-
-
-volatile int global;
-
-
-static int back_in_main;
-
-
-volatile static ElfW(auxv_t) *auxv = NULL;
-
-ElfW(Addr) query_auxv(int type)
-{
- FILE *auxv_f;
- ElfW(auxv_t) auxv_struct;
- ElfW(auxv_t) *auxv_temp;
- int i = 0;
-
- /* if the /proc/self/auxv file has not been manually copied into the heap
- yet, then do it */
-
- if(auxv == NULL)
- {
- auxv_f = fopen("/proc/self/auxv", "r");
-
- if(auxv_f == 0)
- {
- perror("Error opening file for reading");
- return 0;
- }
- auxv = (ElfW(auxv_t) *)malloc(getpagesize());
-
- do
- {
- fread(&auxv_struct, sizeof(ElfW(auxv_t)), 1, auxv_f);
- auxv[i] = auxv_struct;
- i++;
- } while(auxv_struct.a_type != AT_NULL);
- }
-
- auxv_temp = (ElfW(auxv_t) *)auxv;
- i = 0;
- do
- {
- if(auxv_temp[i].a_type == type)
- {
- return auxv_temp[i].a_un.a_val;
- }
- i++;
- } while (auxv_temp[i].a_type != AT_NULL);
-
- return 0;
-}
-
-typedef unsigned int di_fpscr_t __attribute__ ((__mode__ (__DI__)));
-typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
-
-#define _FPSCR_RESERVED 0xfffffff8ffffff04ULL
-
-#define _FPSCR_TEST0_DRN 0x0000000400000000ULL
-#define _FPSCR_TEST0_RN 0x0000000000000003ULL
-
-#define _FPSCR_TEST1_DRN 0x0000000300000000ULL
-#define _FPSCR_TEST1_RN 0x0000000000000002ULL
-
-/* Macros for accessing the hardware control word on Power6[x]. */
-#define _GET_DI_FPSCR(__fpscr) \
- ({union { double d; di_fpscr_t fpscr; } u; \
- register double fr; \
- __asm__ ("mffs %0" : "=f" (fr)); \
- u.d = fr; \
- (__fpscr) = u.fpscr; \
- u.fpscr; \
- })
-
-/* We make sure to zero fp after we use it in order to prevent stale data
- in an fp register from making a test-case pass erroneously. */
-# define _SET_DI_FPSCR(__fpscr) \
- { union { double d; di_fpscr_t fpscr; } u; \
- register double fr; \
- u.fpscr = __fpscr; \
- fr = u.d; \
- /* Set the entire 64-bit FPSCR. */ \
- __asm__ (".machine push; " \
- ".machine \"power6\"; " \
- "mtfsf 255,%0,1,0; " \
- ".machine pop" : : "f" (fr)); \
- fr = 0.0; \
- }
-
-# define _GET_SI_FPSCR(__fpscr) \
- ({union { double d; di_fpscr_t fpscr; } u; \
- register double fr; \
- __asm__ ("mffs %0" : "=f" (fr)); \
- u.d = fr; \
- (__fpscr) = (si_fpscr_t) u.fpscr; \
- (si_fpscr_t) u.fpscr; \
- })
-
-/* We make sure to zero fp after we use it in order to prevent stale data
- in an fp register from making a test-case pass erroneously. */
-# define _SET_SI_FPSCR(__fpscr) \
- { union { double d; di_fpscr_t fpscr; } u; \
- register double fr; \
- /* More-or-less arbitrary; this is a QNaN. */ \
- u.fpscr = 0xfff80000ULL << 32; \
- u.fpscr |= __fpscr & 0xffffffffULL; \
- fr = u.d; \
- __asm__ ("mtfsf 255,%0" : : "f" (fr)); \
- fr = 0.0; \
- }
-
-void prime_special_regs(int which)
-{
- ElfW(Addr) a_val;
-
- di_fpscr_t di_fpscr __attribute__ ((__aligned__(8)));
-
- a_val = query_auxv(AT_HWCAP);
- if(a_val == -1)
- {
- puts ("querying the auxv for the hwcap failed");
- _exit (1);
- }
-
- /* Indicates a 64-bit FPSCR. */
- if (a_val & PPC_FEATURE_HAS_DFP)
- {
- _GET_DI_FPSCR(di_fpscr);
-
- /* Overwrite the existing DRN and RN if there is one. */
- if (which == 0)
- di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST0_DRN | _FPSCR_TEST0_RN));
- else
- di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST1_DRN | _FPSCR_TEST1_RN));
- puts ("Priming 64-bit FPSCR with:");
- printf("0x%.16llx\n",(unsigned long long int)di_fpscr);
-
- _SET_DI_FPSCR(di_fpscr);
- }
- else
- {
- puts ("32-bit FPSCR found and will be tested.");
- _GET_SI_FPSCR(di_fpscr);
-
- /* Overwrite the existing RN if there is one. */
- if (which == 0)
- di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST0_RN));
- else
- di_fpscr = ((di_fpscr & _FPSCR_RESERVED) | (_FPSCR_TEST1_RN));
- puts ("Priming 32-bit FPSCR with:");
- printf("0x%.8lx\n",(unsigned long int) di_fpscr);
-
- _SET_SI_FPSCR(di_fpscr);
- }
-}
-
-void clear_special_regs(void)
-{
- ElfW(Addr) a_val;
-
- di_fpscr_t di_fpscr __attribute__ ((__aligned__(8)));
-
- union {
- double d;
- unsigned long long int lli;
- unsigned int li[2];
- } dlli;
-
- a_val = query_auxv(AT_HWCAP);
- if(a_val == -1)
- {
- puts ("querying the auxv for the hwcap failed");
- _exit (1);
- }
-
-#if __WORDSIZE == 32
- dlli.d = ctx[0].uc_mcontext.uc_regs->fpregs.fpscr;
-#else
- dlli.d = ctx[0].uc_mcontext.fp_regs[32];
-#endif
-
- puts("The FPSCR value saved in the ucontext_t is:");
-
- /* Indicates a 64-bit FPSCR. */
- if (a_val & PPC_FEATURE_HAS_DFP)
- {
- printf("0x%.16llx\n",dlli.lli);
- di_fpscr = 0x0;
- puts ("Clearing the 64-bit FPSCR to:");
- printf("0x%.16llx\n",(unsigned long long int) di_fpscr);
-
- _SET_DI_FPSCR(di_fpscr);
- }
- else
- {
- printf("0x%.8x\n",(unsigned int) dlli.li[1]);
- di_fpscr = 0x0;
- puts ("Clearing the 32-bit FPSCR to:");
- printf("0x%.8lx\n",(unsigned long int) di_fpscr);
-
- _SET_SI_FPSCR(di_fpscr);
- }
-}
-
-void test_special_regs(int which)
-{
- ElfW(Addr) a_val;
- unsigned long long int test;
-
- di_fpscr_t di_fpscr __attribute__ ((__aligned__(8)));
-
- a_val = query_auxv(AT_HWCAP);
- if(a_val == -1)
- {
- puts ("querying the auxv for the hwcap failed");
- _exit (2);
- }
-
- /* Indicates a 64-bit FPSCR. */
- if (a_val & PPC_FEATURE_HAS_DFP)
- {
- _GET_DI_FPSCR(di_fpscr);
-
- if (which == 0)
- puts ("After setcontext the 64-bit FPSCR contains:");
- else
- puts ("After swapcontext the 64-bit FPSCR contains:");
-
- printf("0x%.16llx\n",(unsigned long long int) di_fpscr);
- test = (_FPSCR_TEST0_DRN | _FPSCR_TEST0_RN);
- if((di_fpscr & (test)) != (test))
- {
- printf ("%s: DRN and RN bits set before getcontext were not preserved across [set|swap]context call: %m",__FUNCTION__);
- _exit (3);
- }
- }
- else
- {
- _GET_SI_FPSCR(di_fpscr);
- if (which == 0)
- puts ("After setcontext the 32-bit FPSCR contains:");
- else
- puts ("After swapcontext the 32-bit FPSCR contains:");
-
- printf("0x%.8lx\n",(unsigned long int) di_fpscr);
- test = _FPSCR_TEST0_RN;
- if((di_fpscr & test) != test)
- {
- printf ("%s: RN bit set before getcontext was not preserved across [set|swap]context call: %m",__FUNCTION__);
- _exit (4);
- }
- }
-}
-
-
-static void
-check_called (void)
-{
- if (back_in_main == 0)
- {
- puts ("program did not reach main again");
- _exit (5);
- }
-}
-
-
-int
-main (void)
-{
- atexit (check_called);
-
- puts ("priming the FPSCR with a marker");
- prime_special_regs (0);
-
- puts ("making contexts");
- if (getcontext (&ctx[0]) != 0)
- {
- if (errno == ENOSYS)
- {
- back_in_main = 1;
- exit (0);
- }
-
- printf ("%s: getcontext: %m\n", __FUNCTION__);
- exit (6);
- }
-
- /* Play some tricks with this context. */
- if (++global == 1)
- {
- clear_special_regs ( );
- if (setcontext (&ctx[0]) != 0)
- {
- printf ("%s: setcontext: %m\n", __FUNCTION__);
- exit (7);
- }
- }
- if (global != 2)
- {
- printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
- exit (8);
- }
-
- test_special_regs (0);
-
- global = 0;
- if (getcontext (&ctx[0]) != 0)
- {
- printf ("%s: getcontext: %m\n", __FUNCTION__);
- exit (9);
- }
-
- if (++global == 1)
- {
- puts ("priming the FPSCR with a marker");
- prime_special_regs (1);
-
- puts ("swapping contexts");
- if (swapcontext (&ctx[1], &ctx[0]) != 0)
- {
- printf ("%s: swapcontext: %m\n", __FUNCTION__);
- exit (9);
- }
- }
- if (global != 2)
- {
- printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
- exit (10);
- }
-
- test_special_regs (1);
-
- puts ("back at main program");
- back_in_main = 1;
-
- puts ("test succeeded");
- return 0;
-}