From 6ea21bfe439159f9e480c580927902c6461ec68c Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Tue, 19 Mar 2019 12:22:21 +0000 Subject: powerpc: refactor logb{f,l} The power7 logb implementation does not show a performance gain on ISA 2.07+ chips with faster floating-point to GRP instructions (currently POWER8 and POWER9). This patch moves the POWER7 implementation to generic one and enables it for POWER7. It also add some cleanup to use inline floating-point number instead of define them using static const. The performance difference is for POWER9: - Without patch: "logb": { "subnormal": { "duration": 4.99202e+09, "iterations": 8.83662e+08, "max": 75.194, "min": 5.501, "mean": 5.64925 }, "normal": { "duration": 4.97063e+09, "iterations": 9.97094e+08, "max": 46.489, "min": 4.956, "mean": 4.98512 } } - With patch: "logb": { "subnormal": { "duration": 4.97226e+09, "iterations": 9.92036e+08, "max": 77.209, "min": 4.892, "mean": 5.01218 }, "normal": { "duration": 4.96192e+09, "iterations": 1.07545e+09, "max": 12.361, "min": 4.593, "mean": 4.61382 } } The ifunc implementation is also enabled only for powerpc64. Checked on powerpc-linux-gnu (built without --with-cpu, with --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch), powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+ and --disable-multi-arch). * sysdeps/powerpc/power7/fpu/s_logb.c: Move to ... * sysdeps/powerpc/fpu/s_logb.c: ... here. Use inline FP constants. * sysdeps/powerpc/power7/fpu/s_logbf.c: Move to ... * sysdeps/powerpc/fpu/s_logbf.c: ... here. Use inline FP constants. * sysdeps/powerpc/power7/fpu/s_logbl.c: Move to ... * sysdeps/powerpc/fpu/s_logbl.c: ... here. Use inline FP constants. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c: Adjust implementation path. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c: Adjust implementation path. * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c: Adjust implementation path. * sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile (libm-sysdep_routines): Add s_log* objects. (CFLAGS-s_logbf-power7.c, CFLAGS-s_logbl-power7.c, CFLAGS-s_logb-power7.c): New fule. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c: Move to ... * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c: ... here. * sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Remove file. * sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c: Remove file. * sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c: Likewise. * sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c: Likewise. Reviewed-by: Gabriel F. T. Gomes --- ChangeLog | 51 +++++++++++++ sysdeps/powerpc/fpu/s_logb.c | 64 +++++++++++++++++ sysdeps/powerpc/fpu/s_logbf.c | 56 +++++++++++++++ sysdeps/powerpc/fpu/s_logbl.c | 78 ++++++++++++++++++++ sysdeps/powerpc/power7/fpu/s_logb.c | 74 ------------------- sysdeps/powerpc/power7/fpu/s_logbf.c | 60 ---------------- sysdeps/powerpc/power7/fpu/s_logbl.c | 83 ---------------------- .../powerpc32/power4/fpu/multiarch/s_logb-power7.c | 13 +--- .../power4/fpu/multiarch/s_logbf-power7.c | 8 +-- .../power4/fpu/multiarch/s_logbl-power7.c | 3 +- .../powerpc/powerpc64/be/fpu/multiarch/Makefile | 10 +++ .../powerpc64/be/fpu/multiarch/s_logb-power7.c | 20 ++++++ .../powerpc64/be/fpu/multiarch/s_logb-ppc64.c | 23 ++++++ .../powerpc/powerpc64/be/fpu/multiarch/s_logb.c | 33 +++++++++ .../powerpc64/be/fpu/multiarch/s_logbf-power7.c | 20 ++++++ .../powerpc64/be/fpu/multiarch/s_logbf-ppc64.c | 26 +++++++ .../powerpc/powerpc64/be/fpu/multiarch/s_logbf.c | 33 +++++++++ .../powerpc64/be/fpu/multiarch/s_logbl-power7.c | 20 ++++++ .../powerpc64/be/fpu/multiarch/s_logbl-ppc64.c | 21 ++++++ .../powerpc/powerpc64/be/fpu/multiarch/s_logbl.c | 32 +++++++++ sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile | 11 --- .../powerpc64/fpu/multiarch/s_logb-power7.c | 19 ----- .../powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c | 23 ------ sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c | 33 --------- .../powerpc64/fpu/multiarch/s_logbf-power7.c | 19 ----- .../powerpc64/fpu/multiarch/s_logbf-ppc64.c | 26 ------- sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c | 33 --------- .../powerpc64/fpu/multiarch/s_logbl-power7.c | 19 ----- .../powerpc64/fpu/multiarch/s_logbl-ppc64.c | 21 ------ sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c | 32 --------- sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c | 1 - sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c | 1 - 33 files changed, 490 insertions(+), 477 deletions(-) create mode 100644 sysdeps/powerpc/fpu/s_logb.c create mode 100644 sysdeps/powerpc/fpu/s_logbf.c create mode 100644 sysdeps/powerpc/fpu/s_logbl.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logb.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logbf.c delete mode 100644 sysdeps/powerpc/power7/fpu/s_logbl.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c create mode 100644 sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c delete mode 100644 sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c delete mode 100644 sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c diff --git a/ChangeLog b/ChangeLog index c36f8fd9e6..992f4080c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,56 @@ 2019-07-08 Adhemerval Zanella + * sysdeps/powerpc/power7/fpu/s_logb.c: Move to ... + * sysdeps/powerpc/fpu/s_logb.c: ... here. Use inline FP constants. + * sysdeps/powerpc/power7/fpu/s_logbf.c: Move to ... + * sysdeps/powerpc/fpu/s_logbf.c: ... here. Use inline FP constants. + * sysdeps/powerpc/power7/fpu/s_logbl.c: Move to ... + * sysdeps/powerpc/fpu/s_logbl.c: ... here. Use inline FP constants. + * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c: + Adjust implementation path. + * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c: + Adjust implementation path. + * sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c: + Adjust implementation path. + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile + (libm-sysdep_routines): Add s_log* objects. + (CFLAGS-s_logbf-power7.c, CFLAGS-s_logbl-power7.c, + CFLAGS-s_logb-power7.c): New fule. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c: Move to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c: ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c: Move to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c: ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c: Move + to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c: + ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c: Move to ... + * sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c: ... here. + * sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Remove file. + * sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c: Remove file. + * sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c: Likewise. + * sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c: Likewise. + * sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c: Move to ... * sysdeps/ieee754/dbl-64/s_logb.c: ... here. Add work around for powerpc32 integer 0 converting to -0. diff --git a/sysdeps/powerpc/fpu/s_logb.c b/sysdeps/powerpc/fpu/s_logb.c new file mode 100644 index 0000000000..364f7f0cc3 --- /dev/null +++ b/sysdeps/powerpc/fpu/s_logb.c @@ -0,0 +1,64 @@ +/* Get exponent of a floating-point value. PowerPC version. + Copyright (C) 2012-2019 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 + . */ + +/* ISA 2.07 provides fast GPR to FP instruction (mfvsr{d,wz}) which make + generic implementation faster. */ +#if defined(_ARCH_PWR8) || !defined(_ARCH_PWR7) +# include +#else +# include +# include +# include +# include + +/* This implementation avoids FP to INT conversions by using VSX + bitwise instructions over FP values. */ +double +__logb (double x) +{ + double ret; + + if (__glibc_unlikely (x == 0.0)) + /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ + return -1.0 / fabs (x); + + /* Mask to extract the exponent. */ + asm ("xxland %x0,%x1,%x2\n" + "fcfid %0,%0" + : "=d" (ret) + : "d" (x), "d" (0x7ff0000000000000ULL)); + ret = (ret * 0x1p-52) - 1023.0; + if (ret > 1023.0) + /* Multiplication is used to set logb (+-INF) = INF. */ + return (x * x); + else if (ret == -1023.0) + { + /* POSIX specifies that denormal numbers are treated as + though they were normalized. */ + int64_t ix; + EXTRACT_WORDS64 (ix, x); + ix &= UINT64_C (0x7fffffffffffffff); + return (double) (-1023 - (__builtin_clzll (ix) - 12)); + } + /* Test to avoid logb_downward (0.0) == -0.0. */ + return ret == -0.0 ? 0.0 : ret; +} +# ifndef __logb +libm_alias_double (__logb, logb) +# endif +#endif diff --git a/sysdeps/powerpc/fpu/s_logbf.c b/sysdeps/powerpc/fpu/s_logbf.c new file mode 100644 index 0000000000..cf564ad294 --- /dev/null +++ b/sysdeps/powerpc/fpu/s_logbf.c @@ -0,0 +1,56 @@ +/* Get exponent of a floating-point value. PowerPC version. + Copyright (C) 2012-2019 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 + . */ + +/* ISA 2.07 provides fast GPR to FP instruction (mfvsr{d,wz}) which make + generic implementation faster. */ +#if defined(_ARCH_PWR8) || !defined(_ARCH_PWR7) +# include +#else +# include +# include +/* This implementation avoids FP to INT conversions by using VSX + bitwise instructions over FP values. */ +float +__logbf (float x) +{ + /* VSX operation are all done internally as double. */ + double ret; + + if (__glibc_unlikely (x == 0.0)) + /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ + return -1.0 / fabs (x); + + /* mask to extract the exponent. */ + asm ("xxland %x0,%x1,%x2\n" + "fcfid %0,%0" + : "=d"(ret) + : "d" (x), "d" (0x7ff0000000000000ULL)); + /* ret = (ret >> 52) - 1023.0, since ret is double. */ + ret = (ret * 0x1p-52) - 1023.0; + if (ret > 127.0) + /* Multiplication is used to set logb (+-INF) = INF. */ + return (x * x); + /* Since operations are done with double we don't need + additional tests for subnormal numbers. + The test is to avoid logb_downward (0.0) == -0.0. */ + return ret == -0.0 ? 0.0 : ret; +} +# ifndef __logbf +libm_alias_float (__logb, logb) +# endif +#endif diff --git a/sysdeps/powerpc/fpu/s_logbl.c b/sysdeps/powerpc/fpu/s_logbl.c new file mode 100644 index 0000000000..543cd4a188 --- /dev/null +++ b/sysdeps/powerpc/fpu/s_logbl.c @@ -0,0 +1,78 @@ +/* Get exponent of a floating-point value. PowerPC version. + Copyright (C) 2012-2019 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 + . */ + +/* ISA 2.07 provides fast GPR to FP instruction (mfvsr{d,wz}) which make + generic implementation faster. */ +#if defined(_ARCH_PWR8) || !defined(_ARCH_PWR7) +# include <./sysdeps/ieee754/ldbl-128ibm/s_logbl.c> +#else +# include +# include +# include + +/* This implementation avoids FP to INT conversions by using VSX + bitwise instructions over FP values. */ +long double +__logbl (long double x) +{ + double xh, xl; + double ret; + int64_t hx; + + if (__glibc_unlikely (x == 0.0)) + /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ + return -1.0L / __builtin_fabsl (x); + + ldbl_unpack (x, &xh, &xl); + EXTRACT_WORDS64 (hx, xh); + + /* Mask to extract the exponent. */ + asm ("xxland %x0,%x1,%x2\n" + "fcfid %0,%0" + : "=d" (ret) + : "d" (xh), "d" (0x7ff0000000000000ULL)); + ret = (ret * 0x1p-52) - 1023.0; + if (ret > 1023.0) + /* Multiplication is used to set logb (+-INF) = INF. */ + return (xh * xh); + else if (ret == -1023.0) + { + /* POSIX specifies that denormal number is treated as + though it were normalized. */ + return (long double) (- (__builtin_clzll (hx & 0x7fffffffffffffffLL) \ + - 12) - 1023); + } + else if ((hx & 0x000fffffffffffffLL) == 0) + { + /* If the high part is a power of 2, and the low part is nonzero + with the opposite sign, the low part affects the + exponent. */ + int64_t lx, rhx; + EXTRACT_WORDS64 (lx, xl); + rhx = (hx & 0x7ff0000000000000LL) >> 52; + if ((hx ^ lx) < 0 && (lx & 0x7fffffffffffffffLL) != 0) + rhx--; + return (long double) (rhx - 1023); + } + /* Test to avoid logb_downward (0.0) == -0.0. */ + return ret == -0.0 ? 0.0 : ret; +} +# ifndef __logbl +long_double_symbol (libm, __logbl, logbl); +# endif +#endif diff --git a/sysdeps/powerpc/power7/fpu/s_logb.c b/sysdeps/powerpc/power7/fpu/s_logb.c deleted file mode 100644 index 4cddc0f9c1..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logb.c +++ /dev/null @@ -1,74 +0,0 @@ -/* logb(). PowerPC/POWER7 version. - Copyright (C) 2012-2019 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 - . */ - -#include -#include -#include -#include - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* 2**10 -1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -double -__logb (double x) -{ - double ret; - - if (__builtin_expect (x == 0.0, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0 / __builtin_fabs (x); - - /* ret = x & 0x7ff0000000000000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f" (ret) - : "f" (x), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0; */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two10m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (x * x); - else if (__builtin_expect (ret == two10m1, 0)) - { - /* POSIX specifies that denormal numbers are treated as - though they were normalized. */ - int32_t lx, ix; - int ma; - - EXTRACT_WORDS (ix, lx, x); - ix &= 0x7fffffff; - if (ix == 0) - ma = __builtin_clz (lx) + 32; - else - ma = __builtin_clz (ix); - return (double) (-1023 - (ma - 12)); - } - /* Test to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -libm_alias_double (__logb, logb) diff --git a/sysdeps/powerpc/power7/fpu/s_logbf.c b/sysdeps/powerpc/power7/fpu/s_logbf.c deleted file mode 100644 index b0d006b5c7..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logbf.c +++ /dev/null @@ -1,60 +0,0 @@ -/* logbf(). PowerPC/POWER7 version. - Copyright (C) 2012-2019 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 - . */ - -#include - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* -2**10 + 1 */ -static const double two7m1 = -127.0; /* -2**7 + 1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -float -__logbf (float x) -{ - /* VSX operation are all done internally as double. */ - double ret; - - if (__builtin_expect (x == 0.0, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0 / __builtin_fabsf (x); - - /* ret = x & 0x7f800000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f"(ret) - : "f" (x), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0, since ret is double. */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two7m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (x * x); - /* Since operations are done with double we don't need - additional tests for subnormal numbers. - The test is to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -libm_alias_float (__logb, logb) diff --git a/sysdeps/powerpc/power7/fpu/s_logbl.c b/sysdeps/powerpc/power7/fpu/s_logbl.c deleted file mode 100644 index 76c29daeca..0000000000 --- a/sysdeps/powerpc/power7/fpu/s_logbl.c +++ /dev/null @@ -1,83 +0,0 @@ -/* logbl(). PowerPC/POWER7 version. - Copyright (C) 2012-2019 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 - . */ - -#include -#include -#include - -/* This implementation avoids FP to INT conversions by using VSX - bitwise instructions over FP values. */ - -static const double two1div52 = 2.220446049250313e-16; /* 1/2**52 */ -static const double two10m1 = -1023.0; /* 2**10 -1 */ - -/* FP mask to extract the exponent. */ -static const union { - unsigned long long mask; - double d; -} mask = { 0x7ff0000000000000ULL }; - -long double -__logbl (long double x) -{ - double xh, xl; - double ret; - int64_t hx; - - if (__builtin_expect (x == 0.0L, 0)) - /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF]. */ - return -1.0L / __builtin_fabsl (x); - - ldbl_unpack (x, &xh, &xl); - EXTRACT_WORDS64 (hx, xh); - /* ret = x & 0x7ff0000000000000; */ - asm ( - "xxland %x0,%x1,%x2\n" - "fcfid %0,%0" - : "=f" (ret) - : "f" (xh), "f" (mask.d)); - /* ret = (ret >> 52) - 1023.0; */ - ret = (ret * two1div52) + two10m1; - if (__builtin_expect (ret > -two10m1, 0)) - /* Multiplication is used to set logb (+-INF) = INF. */ - return (xh * xh); - else if (__builtin_expect (ret == two10m1, 0)) - { - /* POSIX specifies that denormal number is treated as - though it were normalized. */ - return (long double) (- (__builtin_clzll (hx & 0x7fffffffffffffffLL) \ - - 12) - 1023); - } - else if ((hx & 0x000fffffffffffffLL) == 0) - { - /* If the high part is a power of 2, and the low part is nonzero - with the opposite sign, the low part affects the - exponent. */ - int64_t lx, rhx; - EXTRACT_WORDS64 (lx, xl); - rhx = (hx & 0x7ff0000000000000LL) >> 52; - if ((hx ^ lx) < 0 && (lx & 0x7fffffffffffffffLL) != 0) - rhx--; - return (long double) (rhx - 1023); - } - /* Test to avoid logb_downward (0.0) == -0.0. */ - return ret == -0.0 ? 0.0 : ret; -} -#ifndef __logbl -long_double_symbol (libm, __logbl, logbl); -#endif diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c index 812771ac2e..c893ebcf29 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c +++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c @@ -16,16 +16,5 @@ License along with the GNU C Library; if not, see . */ -#include -#include - -#undef weak_alias -#define weak_alias(a, b) -#undef strong_alias -#define strong_alias(a, b) -#undef compat_symbol -#define compat_symbol(lib, name, alias, ver) - #define __logb __logb_power7 - -#include +#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c index 62c2318421..059c53bce2 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c +++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c @@ -16,11 +16,5 @@ License along with the GNU C Library; if not, see . */ -#include - -#undef weak_alias -#define weak_alias(a, b) - #define __logbf __logbf_power7 - -#include +#include diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c index c4fe590c6c..22a6ffb064 100644 --- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c +++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c @@ -17,5 +17,4 @@ . */ #define __logbl __logbl_power7 - -#include +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile index f5fa357d57..b27bad3ba4 100644 --- a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile @@ -32,6 +32,12 @@ libm-sysdep_routines += s_ceil-power5+ \ s_llround-power5+ \ s_llround-ppc64 \ s_llroundf-ppc64 \ + s_logb-power7 \ + s_logbf-power7 \ + s_logbl-power7 \ + s_logb-ppc64 \ + s_logbf-ppc64 \ + s_logbl-ppc64 \ $(sysdep_calls:s_%=m_%) CFLAGS-s_ceil-power5+.c = -mcpu=power5+ @@ -50,6 +56,10 @@ CFLAGS-s_llround-power5+.c += -mcpu=power5+ CFLAGS-s_modf-power5+.c += -mcpu=power5+ CFLAGS-s_modff-power5+.c += -mcpu=power5+ +CFLAGS-s_logbf-power7.c = -mcpu=power7 +CFLAGS-s_logbl-power7.c = -mcpu=power7 +CFLAGS-s_logb-power7.c = -mcpu=power7 + # These files quiet sNaNs in a way that is optimized away without # -fsignaling-nans. CFLAGS-s_modf-ppc64.c += -fsignaling-nans diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c new file mode 100644 index 0000000000..807bf58eeb --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c @@ -0,0 +1,20 @@ +/* logb(). PowerPC64/POWER7 version. + Copyright (C) 2013-2019 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 + . */ + +#define __logb __logb_power7 +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c new file mode 100644 index 0000000000..8aae1e8f12 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c @@ -0,0 +1,23 @@ +/* logb(). PowerPC32/POWER7 version. + Copyright (C) 2013-2019 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 + . */ + +#include + +#define __logb __logb_ppc64 + +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c new file mode 100644 index 0000000000..b6d7225112 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c @@ -0,0 +1,33 @@ +/* Multiple versions of logb. + Copyright (C) 2013-2019 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 + . */ + +#include +#include +#include +#include "init-arch.h" +#include + +extern __typeof (__logb) __logb_ppc64 attribute_hidden; +extern __typeof (__logb) __logb_power7 attribute_hidden; + +libc_ifunc (__logb, + (hwcap & PPC_FEATURE_ARCH_2_06) + ? __logb_power7 + : __logb_ppc64); + +libm_alias_double (__logb, logb) diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c new file mode 100644 index 0000000000..4fee11dd84 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c @@ -0,0 +1,20 @@ +/* logb(). PowerPC64/POWER7 version. + Copyright (C) 2013-2019 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 + . */ + +#define __logbf __logbf_power7 +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c new file mode 100644 index 0000000000..727fabc03c --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c @@ -0,0 +1,26 @@ +/* logbf(). PowerPC64 default implementation. + Copyright (C) 2013-2019 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 + . */ + +#include + +#undef weak_alias +#define weak_alias(a, b) + +#define __logbf __logbf_ppc64 + +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c new file mode 100644 index 0000000000..46875dcde2 --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c @@ -0,0 +1,33 @@ +/* Multiple versions of logbf. + Copyright (C) 2013-2019 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 + . */ + +#include +#include +#include +#include "init-arch.h" +#include + +extern __typeof (__logbf) __logbf_ppc64 attribute_hidden; +extern __typeof (__logbf) __logbf_power7 attribute_hidden; + +libc_ifunc (__logbf, + (hwcap & PPC_FEATURE_ARCH_2_06) + ? __logbf_power7 + : __logbf_ppc64); + +libm_alias_float (__logb, logb) diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c new file mode 100644 index 0000000000..c413d6e50d --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c @@ -0,0 +1,20 @@ +/* logb(). PowerPC64/POWER7 version. + Copyright (C) 2013-2019 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 + . */ + +#define __logbl __logbl_power7 +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c new file mode 100644 index 0000000000..ffe6e17d5e --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c @@ -0,0 +1,21 @@ +/* logbl(). PowerPC64/POWER7 version. + Copyright (C) 2012-2019 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 + . */ + +#define __logbl __logbl_ppc64 + +#include diff --git a/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c new file mode 100644 index 0000000000..d44122a12b --- /dev/null +++ b/sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c @@ -0,0 +1,32 @@ +/* Multiple versions of logbl. + Copyright (C) 2013-2019 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 + . */ + +#include +#include +#include +#include "init-arch.h" + +extern __typeof (__logbl) __logbl_ppc64 attribute_hidden; +extern __typeof (__logbl) __logbl_power7 attribute_hidden; + +libc_ifunc (__logbl, + (hwcap & PPC_FEATURE_ARCH_2_06) + ? __logbl_power7 + : __logbl_ppc64); + +long_double_symbol (libm, __logbl, logbl); diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile deleted file mode 100644 index d7ad1e2724..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -ifeq ($(subdir),math) -sysdep_routines += $(sysdep_calls) -libm-sysdep_routines += s_logb-power7 s_logbf-power7 \ - s_logbl-power7 s_logb-ppc64 s_logbf-ppc64 \ - s_logbl-ppc64 \ - $(sysdep_calls:s_%=m_%) - -CFLAGS-s_logbf-power7.c = -mcpu=power7 -CFLAGS-s_logbl-power7.c = -mcpu=power7 -CFLAGS-s_logb-power7.c = -mcpu=power7 -endif diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c deleted file mode 100644 index 507862b2bf..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2019 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 - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c deleted file mode 100644 index 8aae1e8f12..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c +++ /dev/null @@ -1,23 +0,0 @@ -/* logb(). PowerPC32/POWER7 version. - Copyright (C) 2013-2019 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 - . */ - -#include - -#define __logb __logb_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c deleted file mode 100644 index b6d7225112..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Multiple versions of logb. - Copyright (C) 2013-2019 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 - . */ - -#include -#include -#include -#include "init-arch.h" -#include - -extern __typeof (__logb) __logb_ppc64 attribute_hidden; -extern __typeof (__logb) __logb_power7 attribute_hidden; - -libc_ifunc (__logb, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logb_power7 - : __logb_ppc64); - -libm_alias_double (__logb, logb) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c deleted file mode 100644 index 3535ea78cd..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2019 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 - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c deleted file mode 100644 index 727fabc03c..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c +++ /dev/null @@ -1,26 +0,0 @@ -/* logbf(). PowerPC64 default implementation. - Copyright (C) 2013-2019 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 - . */ - -#include - -#undef weak_alias -#define weak_alias(a, b) - -#define __logbf __logbf_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c deleted file mode 100644 index 46875dcde2..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Multiple versions of logbf. - Copyright (C) 2013-2019 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 - . */ - -#include -#include -#include -#include "init-arch.h" -#include - -extern __typeof (__logbf) __logbf_ppc64 attribute_hidden; -extern __typeof (__logbf) __logbf_power7 attribute_hidden; - -libc_ifunc (__logbf, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbf_power7 - : __logbf_ppc64); - -libm_alias_float (__logb, logb) diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c deleted file mode 100644 index 915636176d..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c +++ /dev/null @@ -1,19 +0,0 @@ -/* logb(). PowerPC64/POWER7 version. - Copyright (C) 2013-2019 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 - . */ - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c deleted file mode 100644 index ffe6e17d5e..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c +++ /dev/null @@ -1,21 +0,0 @@ -/* logbl(). PowerPC64/POWER7 version. - Copyright (C) 2012-2019 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 - . */ - -#define __logbl __logbl_ppc64 - -#include diff --git a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c b/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c deleted file mode 100644 index d44122a12b..0000000000 --- a/sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Multiple versions of logbl. - Copyright (C) 2013-2019 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 - . */ - -#include -#include -#include -#include "init-arch.h" - -extern __typeof (__logbl) __logbl_ppc64 attribute_hidden; -extern __typeof (__logbl) __logbl_power7 attribute_hidden; - -libc_ifunc (__logbl, - (hwcap & PPC_FEATURE_ARCH_2_06) - ? __logbl_power7 - : __logbl_ppc64); - -long_double_symbol (libm, __logbl, logbl); diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c deleted file mode 100644 index 2599c771d9..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c deleted file mode 100644 index 7a5a8032e0..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c b/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c deleted file mode 100644 index 524ae2c78d..0000000000 --- a/sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c +++ /dev/null @@ -1 +0,0 @@ -#include -- cgit 1.4.1