aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog42
-rw-r--r--math/Versions2
-rw-r--r--math/w_pow.c8
-rw-r--r--math/w_pow_compat.c20
-rw-r--r--sysdeps/i386/fpu/w_pow.c1
-rw-r--r--sysdeps/ia64/fpu/e_pow.S12
-rw-r--r--sysdeps/ieee754/dbl-64/e_pow.c16
-rw-r--r--sysdeps/ieee754/dbl-64/w_pow.c1
-rw-r--r--sysdeps/m68k/m680x0/fpu/w_pow.c1
-rw-r--r--sysdeps/mach/hurd/i386/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/i386/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist1
-rw-r--r--sysdeps/x86_64/fpu/multiarch/e_pow-fma.c4
-rw-r--r--sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c4
-rw-r--r--sysdeps/x86_64/fpu/multiarch/e_pow.c4
-rw-r--r--sysdeps/x86_64/fpu/multiarch/w_pow.c1
37 files changed, 125 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 94d0b97..f1db5d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,47 @@
2018-11-21 Szabolcs Nagy <szabolcs.nagy@arm.com>
+ * 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 <szabolcs.nagy@arm.com>
+
* math/Versions (GLIBC_2.29): Add log2.
* math/w_log2_compat.c (__log2_compat): Change to versioned compat
symbol.
diff --git a/math/Versions b/math/Versions
index a887602..f1ab297 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 0000000..a66fd39
--- /dev/null
+++ b/math/w_pow.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-double.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_pow_template.c>
+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 815c679..eadf9b0 100644
--- a/math/w_pow_compat.c
+++ b/math/w_pow_compat.c
@@ -22,10 +22,12 @@
#include <libm-alias-double.h>
-#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 0000000..b50c198
--- /dev/null
+++ b/sysdeps/i386/fpu/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
diff --git a/sysdeps/ia64/fpu/e_pow.S b/sysdeps/ia64/fpu/e_pow.S
index 3b402f3..d827bcc 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 ba38bfe..7cf01b8 100644
--- a/sysdeps/ieee754/dbl-64/e_pow.c
+++ b/sysdeps/ieee754/dbl-64/e_pow.c
@@ -20,6 +20,9 @@
#include <stdint.h>
#include <math-barriers.h>
#include <math-narrow-eval.h>
+#include <math-svid-compat.h>
+#include <shlib-compat.h>
+#include <libm-alias-double.h>
#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 0000000..1cc8931
--- /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 0000000..b50c198
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index f319580..5208057 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 c01ff24..d38ebfb 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 f5ec874..1157dcf 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 9b7d87b..547e7bc 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 d193f99..4bdd605 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 eae2c55..087e297 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 9796e8d..fff5eb1 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 9b7d87b..547e7bc 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 f73ad1a..5f42264 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 dcb7dbb..bbeeebf 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 1146e2d..93405d1 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 d9c830d..33f67a5 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 0902ca0..ecbe596 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 3e9e5e7..a47fca4 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 7a3c6be..ca7095f 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 d50c82c..554dcd2 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 cbf2ad3..9c6cf06 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 382455c..be5d286 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 92b794b..512fbc8 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 3320f14..09d97d6 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 2a10a0f..3240ff6 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 ebbc58d..351331b 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 3e02619..087f4db 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 03cd62f..e9a1cc0 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 73c1e7f..2c5bfae 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 <math.h>
+#define __pow __ieee754_pow_fma
#define SECTION __attribute__ ((section (".text.fma")))
#include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c b/sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c
index 8971b65..7ec1a0a 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 <math.h>
+#define __pow __ieee754_pow_fma4
#define SECTION __attribute__ ((section (".text.fma4")))
#include <sysdeps/ieee754/dbl-64/e_pow.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/e_pow.c b/sysdeps/x86_64/fpu/multiarch/e_pow.c
index 084073c..207ffcd 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
<http://www.gnu.org/licenses/>. */
+#include <math.h>
+
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 <sysdeps/ieee754/dbl-64/e_pow.c>
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 0000000..b50c198
--- /dev/null
+++ b/sysdeps/x86_64/fpu/multiarch/w_pow.c
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>