From a502c5294b46109827c970a989ee10d1a9dcb176 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Wed, 27 Jun 2018 16:33:16 +0100 Subject: [PATCH] Remove the error handling wrapper from pow Introduce new pow symbol version that doesn't do SVID compatible error handling. The standard errno and fp exception based error handling is inline in the new code and does not have significant overhead. The wrapper is disabled for sysdeps/ieee754/dbl-64 by using empty w_pow.c and enabled for targets with their own pow implementation or ifunc dispatch on __ieee754_pow by including math/w_pow.c. The compatibility symbol version still uses the wrapper with SVID error handling around the new code. There is no new symbol version nor compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv). On targets where previously powl was an alias of pow, now it points to the compatibility symbol with the wrapper, because it still need the SVID compatible error handling. This affects NO_LONG_DOUBLE (e.g. arm) and LONG_DOUBLE_COMPAT (e.g. alpha) targets as well. The __pow_finite symbol is now an alias of pow. Both __pow_finite and pow set errno and thus not const functions. The ia64 asm is changed so the compat and new symbol versions map to the same address. On x86_64 #include was added before macro definitions that may affect that header. Tested with build-many-glibcs.py. * math/Versions (GLIBC_2.29): Add pow. * math/w_pow_compat.c (__pow_compat): Change to versioned compat symbol. * math/w_pow.c: New file. * sysdeps/i386/fpu/w_pow.c: New file. * sysdeps/ia64/fpu/e_pow.S: Add versioned symbols. * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Rename to __pow and add necessary aliases. * sysdeps/ieee754/dbl-64/w_pow.c: New file. * sysdeps/m68k/m680x0/fpu/w_pow.c: New file. * sysdeps/mach/hurd/i386/libm.abilist: Update. * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update. * sysdeps/unix/sysv/linux/alpha/libm.abilist: Update. * sysdeps/unix/sysv/linux/arm/libm.abilist: Update. * sysdeps/unix/sysv/linux/hppa/libm.abilist: Update. * sysdeps/unix/sysv/linux/i386/libm.abilist: Update. * sysdeps/unix/sysv/linux/ia64/libm.abilist: Update. * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update. * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update. * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update. * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update. * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update. * sysdeps/unix/sysv/linux/nios2/libm.abilist: Update. * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update. * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update. * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update. * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update. * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update. * sysdeps/unix/sysv/linux/sh/libm.abilist: Update. * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update. * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update. * sysdeps/x86_64/fpu/multiarch/e_pow-fma.c (__ieee754_pow): Rename to __pow. * sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c (__ieee754_pow): Likewise. * sysdeps/x86_64/fpu/multiarch/e_pow.c (__ieee754_pow): Likewise. * sysdeps/x86_64/fpu/multiarch/w_pow.c: New file. --- ChangeLog | 42 +++++++++++++++++++ math/Versions | 2 +- math/w_pow.c | 8 ++++ math/w_pow_compat.c | 20 +++++++-- sysdeps/i386/fpu/w_pow.c | 1 + sysdeps/ia64/fpu/e_pow.S | 12 ++++-- sysdeps/ieee754/dbl-64/e_pow.c | 16 +++++-- sysdeps/ieee754/dbl-64/w_pow.c | 1 + sysdeps/m68k/m680x0/fpu/w_pow.c | 1 + sysdeps/mach/hurd/i386/libm.abilist | 1 + sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 + sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/libm.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 + sysdeps/unix/sysv/linux/i386/libm.abilist | 1 + sysdeps/unix/sysv/linux/ia64/libm.abilist | 1 + .../sysv/linux/m68k/coldfire/libm.abilist | 1 + .../unix/sysv/linux/m68k/m680x0/libm.abilist | 1 + .../unix/sysv/linux/microblaze/libm.abilist | 1 + .../unix/sysv/linux/mips/mips32/libm.abilist | 1 + .../unix/sysv/linux/mips/mips64/libm.abilist | 1 + sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 + .../linux/powerpc/powerpc32/fpu/libm.abilist | 1 + .../powerpc/powerpc32/nofpu/libm.abilist | 1 + .../linux/powerpc/powerpc64/libm-le.abilist | 1 + .../sysv/linux/powerpc/powerpc64/libm.abilist | 1 + .../unix/sysv/linux/s390/s390-32/libm.abilist | 1 + .../unix/sysv/linux/s390/s390-64/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/libm.abilist | 1 + .../sysv/linux/sparc/sparc32/libm.abilist | 1 + .../sysv/linux/sparc/sparc64/libm.abilist | 1 + .../unix/sysv/linux/x86_64/64/libm.abilist | 1 + .../unix/sysv/linux/x86_64/x32/libm.abilist | 1 + sysdeps/x86_64/fpu/multiarch/e_pow-fma.c | 4 +- sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c | 4 +- sysdeps/x86_64/fpu/multiarch/e_pow.c | 4 +- sysdeps/x86_64/fpu/multiarch/w_pow.c | 1 + 37 files changed, 125 insertions(+), 15 deletions(-) create mode 100644 math/w_pow.c create mode 100644 sysdeps/i386/fpu/w_pow.c create mode 100644 sysdeps/ieee754/dbl-64/w_pow.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_pow.c create mode 100644 sysdeps/x86_64/fpu/multiarch/w_pow.c diff --git a/ChangeLog b/ChangeLog index 94d0b97ebac..f1db5d3d636 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +2018-11-21 Szabolcs Nagy + + * math/Versions (GLIBC_2.29): Add pow. + * math/w_pow_compat.c (__pow_compat): Change to versioned compat + symbol. + * math/w_pow.c: New file. + * sysdeps/i386/fpu/w_pow.c: New file. + * sysdeps/ia64/fpu/e_pow.S: Add versioned symbols. + * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Rename to __pow + and add necessary aliases. + * sysdeps/ieee754/dbl-64/w_pow.c: New file. + * sysdeps/m68k/m680x0/fpu/w_pow.c: New file. + * sysdeps/mach/hurd/i386/libm.abilist: Update. + * sysdeps/unix/sysv/linux/aarch64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/alpha/libm.abilist: Update. + * sysdeps/unix/sysv/linux/arm/libm.abilist: Update. + * sysdeps/unix/sysv/linux/hppa/libm.abilist: Update. + * sysdeps/unix/sysv/linux/i386/libm.abilist: Update. + * sysdeps/unix/sysv/linux/ia64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Update. + * sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Update. + * sysdeps/unix/sysv/linux/microblaze/libm.abilist: Update. + * sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/nios2/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist: Update. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sh/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Update. + * sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Update. + * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Update. + * sysdeps/x86_64/fpu/multiarch/e_pow-fma.c (__ieee754_pow): Rename to + __pow. + * sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c (__ieee754_pow): Likewise. + * sysdeps/x86_64/fpu/multiarch/e_pow.c (__ieee754_pow): Likewise. + * sysdeps/x86_64/fpu/multiarch/w_pow.c: New file. + 2018-11-21 Szabolcs Nagy * math/Versions (GLIBC_2.29): Add log2. diff --git a/math/Versions b/math/Versions index a887602f2f7..f1ab2975778 100644 --- a/math/Versions +++ b/math/Versions @@ -577,6 +577,6 @@ libm { } GLIBC_2.29 { # No SVID compatible error handling. - exp; exp2; log; log2; + exp; exp2; log; log2; pow; } } diff --git a/math/w_pow.c b/math/w_pow.c new file mode 100644 index 00000000000..a66fd3965a1 --- /dev/null +++ b/math/w_pow.c @@ -0,0 +1,8 @@ +#include +#undef __USE_WRAPPER_TEMPLATE +#define __USE_WRAPPER_TEMPLATE 1 +#undef declare_mgen_alias +#define declare_mgen_alias(a, b) +#include +versioned_symbol (libm, __pow, pow, GLIBC_2_29); +libm_alias_double_other (__pow, pow) diff --git a/math/w_pow_compat.c b/math/w_pow_compat.c index 815c67963b0..eadf9b083f7 100644 --- a/math/w_pow_compat.c +++ b/math/w_pow_compat.c @@ -22,10 +22,12 @@ #include -#if LIBM_SVID_COMPAT +#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29) \ + || defined NO_LONG_DOUBLE \ + || defined LONG_DOUBLE_COMPAT) /* wrapper pow */ double -__pow (double x, double y) +__pow_compat (double x, double y) { double z = __ieee754_pow (x, y); if (__glibc_unlikely (!isfinite (z))) @@ -60,5 +62,17 @@ __pow (double x, double y) return z; } -libm_alias_double (__pow, pow) +# if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29) +compat_symbol (libm, __pow_compat, pow, GLIBC_2_0); +# endif +# ifdef NO_LONG_DOUBLE +weak_alias (__pow_compat, powl) +# endif +# ifdef LONG_DOUBLE_COMPAT +/* Work around gas bug "multiple versions for symbol". */ +weak_alias (__pow_compat, __pow_compat_alias) + +LONG_DOUBLE_COMPAT_CHOOSE_libm_powl ( + compat_symbol (libm, __pow_compat_alias, powl, FIRST_VERSION_libm_powl), ); +# endif #endif diff --git a/sysdeps/i386/fpu/w_pow.c b/sysdeps/i386/fpu/w_pow.c new file mode 100644 index 00000000000..b50c1988de5 --- /dev/null +++ b/sysdeps/i386/fpu/w_pow.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/ia64/fpu/e_pow.S b/sysdeps/ia64/fpu/e_pow.S index 3b402f3f145..d827bcc8944 100644 --- a/sysdeps/ia64/fpu/e_pow.S +++ b/sysdeps/ia64/fpu/e_pow.S @@ -910,7 +910,7 @@ data8 0xEAC0C6E7DD24392F , 0x00003FFF LOCAL_OBJECT_END(pow_tbl2) .section .text -GLOBAL_LIBM_ENTRY(pow) +WEAK_LIBM_ENTRY(pow) // Get exponent of x. Will be used to calculate K. { .mfi @@ -2233,8 +2233,14 @@ POW_OVER_UNDER_ERROR: } ;; -GLOBAL_LIBM_END(pow) -libm_alias_double_other (pow, pow) +WEAK_LIBM_END(pow) +libm_alias_double_other (__pow, pow) +#ifdef SHARED +.symver pow,pow@@GLIBC_2.29 +.weak __pow_compat +.set __pow_compat,__pow +.symver __pow_compat,pow@GLIBC_2.2 +#endif LOCAL_LIBM_ENTRY(__libm_error_region) diff --git a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c index ba38bfefcbb..7cf01b8d906 100644 --- a/sysdeps/ieee754/dbl-64/e_pow.c +++ b/sysdeps/ieee754/dbl-64/e_pow.c @@ -20,6 +20,9 @@ #include #include #include +#include +#include +#include #include "math_config.h" /* @@ -276,7 +279,7 @@ zeroinfnan (uint64_t i) double SECTION -__ieee754_pow (double x, double y) +__pow (double x, double y) { uint32_t sign_bias = 0; uint64_t ix, iy; @@ -375,6 +378,13 @@ __ieee754_pow (double x, double y) #endif return exp_inline (ehi, elo, sign_bias); } -#ifndef __ieee754_pow -strong_alias (__ieee754_pow, __pow_finite) +#ifndef __pow +strong_alias (__pow, __ieee754_pow) +strong_alias (__pow, __pow_finite) +# if LIBM_SVID_COMPAT +versioned_symbol (libm, __pow, pow, GLIBC_2_29); +libm_alias_double_other (__pow, pow) +# else +libm_alias_double (__pow, pow) +# endif #endif diff --git a/sysdeps/ieee754/dbl-64/w_pow.c b/sysdeps/ieee754/dbl-64/w_pow.c new file mode 100644 index 00000000000..1cc89317007 --- /dev/null +++ b/sysdeps/ieee754/dbl-64/w_pow.c @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/m68k/m680x0/fpu/w_pow.c b/sysdeps/m68k/m680x0/fpu/w_pow.c new file mode 100644 index 00000000000..b50c1988de5 --- /dev/null +++ b/sysdeps/m68k/m680x0/fpu/w_pow.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index f319580964a..52080575867 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1072,3 +1072,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index c01ff24dfef..d38ebfb5102 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index f5ec8742dca..1157dcf398c 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1047,6 +1047,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.3.4 __c1_cabsf F GLIBC_2.3.4 __c1_cacosf F GLIBC_2.3.4 __c1_cacoshf F diff --git a/sysdeps/unix/sysv/linux/arm/libm.abilist b/sysdeps/unix/sysv/linux/arm/libm.abilist index 9b7d87b3299..547e7bcd9fe 100644 --- a/sysdeps/unix/sysv/linux/arm/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/libm.abilist @@ -457,6 +457,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index d193f995612..4bdd605269b 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -768,4 +768,5 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index eae2c55d38f..087e29790e3 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1079,3 +1079,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/ia64/libm.abilist b/sysdeps/unix/sysv/linux/ia64/libm.abilist index 9796e8d37bf..fff5eb17b3c 100644 --- a/sysdeps/unix/sysv/linux/ia64/libm.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libm.abilist @@ -1009,3 +1009,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index 9b7d87b3299..547e7bcd9fe 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -457,6 +457,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 _LIB_VERSION D 0x4 GLIBC_2.4 __clog10 F GLIBC_2.4 __clog10f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index f73ad1a35c7..5f422643b14 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -808,3 +808,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/microblaze/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/libm.abilist index dcb7dbba914..bbeeebf776c 100644 --- a/sysdeps/unix/sysv/linux/microblaze/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/libm.abilist @@ -769,3 +769,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 1146e2d6fd5..93405d1641c 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -768,4 +768,5 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index d9c830da424..33f67a5d3d0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist index 0902ca01f21..ecbe596898d 100644 --- a/sysdeps/unix/sysv/linux/nios2/libm.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist @@ -769,3 +769,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index 3e9e5e75fd2..a47fca400ab 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -814,6 +814,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index 7a3c6be1f42..ca7095fe72a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -813,6 +813,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist index d50c82c7c82..554dcd26233 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist @@ -1080,3 +1080,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist index cbf2ad3ca67..9c6cf06d139 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist @@ -492,6 +492,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.3 _LIB_VERSION D 0x4 GLIBC_2.3 __clog10 F GLIBC_2.3 __clog10f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 382455c9cf6..be5d286bf22 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1037,6 +1037,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 92b794bf123..512fbc86307 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1037,6 +1037,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sh/libm.abilist b/sysdeps/unix/sysv/linux/sh/libm.abilist index 3320f1403a7..09d97d6f521 100644 --- a/sysdeps/unix/sysv/linux/sh/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/libm.abilist @@ -768,4 +768,5 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 exp2l F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index 2a10a0ffb95..3240ff6aa3b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1044,6 +1044,7 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F GLIBC_2.4 __clog10l F GLIBC_2.4 __finitel F GLIBC_2.4 __fpclassifyl F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index ebbc58da91c..351331beb71 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1036,3 +1036,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index 3e02619df9d..087f4db0517 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1070,3 +1070,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index 03cd62fd6fa..e9a1cc0d5cd 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1070,3 +1070,4 @@ GLIBC_2.29 exp F GLIBC_2.29 exp2 F GLIBC_2.29 log F GLIBC_2.29 log2 F +GLIBC_2.29 pow F diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c index 73c1e7fb897..2c5bfaeed7e 100644 --- a/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c +++ b/sysdeps/x86_64/fpu/multiarch/e_pow-fma.c @@ -1,5 +1,5 @@ -#define __ieee754_pow __ieee754_pow_fma -#define __exp1 __exp1_fma +#include +#define __pow __ieee754_pow_fma #define SECTION __attribute__ ((section (".text.fma"))) #include diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c index 8971b655ca9..7ec1a0ac848 100644 --- a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c +++ b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c @@ -1,5 +1,5 @@ -#define __ieee754_pow __ieee754_pow_fma4 -#define __exp1 __exp1_fma4 +#include +#define __pow __ieee754_pow_fma4 #define SECTION __attribute__ ((section (".text.fma4"))) #include diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c index 084073c9361..207ffcd2f1b 100644 --- a/sysdeps/x86_64/fpu/multiarch/e_pow.c +++ b/sysdeps/x86_64/fpu/multiarch/e_pow.c @@ -16,6 +16,8 @@ License along with the GNU C Library; if not, see . */ +#include + extern double __redirect_ieee754_pow (double, double); #define SYMBOL_NAME ieee754_pow @@ -25,5 +27,5 @@ libc_ifunc_redirected (__redirect_ieee754_pow, __ieee754_pow, IFUNC_SELECTOR ()); strong_alias (__ieee754_pow, __pow_finite) -#define __ieee754_pow __ieee754_pow_sse2 +#define __pow __ieee754_pow_sse2 #include diff --git a/sysdeps/x86_64/fpu/multiarch/w_pow.c b/sysdeps/x86_64/fpu/multiarch/w_pow.c new file mode 100644 index 00000000000..b50c1988de5 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/w_pow.c @@ -0,0 +1 @@ +#include -- 2.47.2