]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove the error handling wrapper from pow
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 27 Jun 2018 15:33:16 +0000 (16:33 +0100)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 21 Nov 2018 09:58:36 +0000 (09:58 +0000)
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 <math.h> 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.

37 files changed:
ChangeLog
math/Versions
math/w_pow.c [new file with mode: 0644]
math/w_pow_compat.c
sysdeps/i386/fpu/w_pow.c [new file with mode: 0644]
sysdeps/ia64/fpu/e_pow.S
sysdeps/ieee754/dbl-64/e_pow.c
sysdeps/ieee754/dbl-64/w_pow.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_pow.c [new file with mode: 0644]
sysdeps/mach/hurd/i386/libm.abilist
sysdeps/unix/sysv/linux/aarch64/libm.abilist
sysdeps/unix/sysv/linux/alpha/libm.abilist
sysdeps/unix/sysv/linux/arm/libm.abilist
sysdeps/unix/sysv/linux/hppa/libm.abilist
sysdeps/unix/sysv/linux/i386/libm.abilist
sysdeps/unix/sysv/linux/ia64/libm.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
sysdeps/unix/sysv/linux/microblaze/libm.abilist
sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
sysdeps/unix/sysv/linux/nios2/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
sysdeps/unix/sysv/linux/sh/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
sysdeps/x86_64/fpu/multiarch/e_pow-fma.c
sysdeps/x86_64/fpu/multiarch/e_pow-fma4.c
sysdeps/x86_64/fpu/multiarch/e_pow.c
sysdeps/x86_64/fpu/multiarch/w_pow.c [new file with mode: 0644]

index 94d0b97ebac027a0bb17f2258f8b19534607e989..f1db5d3d6365db962eaae314c8d624e9fb102a4c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+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.
index a887602f2f7ba66a517a73255b2c35718f12faa8..f1ab29757782737b438eadb821f9495208b71bce 100644 (file)
@@ -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 (file)
index 0000000..a66fd39
--- /dev/null
@@ -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)
index 815c67963b01ec2fbbbbc6610da3e1d0cc791a02..eadf9b083f7f6e4d21163ab0d7f77358009b9e17 100644 (file)
 #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 (file)
index 0000000..b50c198
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
index 3b402f3f1451f653002a6b53b3523fad301f8688..d827bcc89449c013d2946c9e049b25a7355db4e0 100644 (file)
@@ -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)
index ba38bfefcbb90fa96e84ee03c5ae4a1b33c2af7d..7cf01b8d9062aa77283dc919f7d0745ce9d4ed94 100644 (file)
@@ -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 (file)
index 0000000..1cc8931
--- /dev/null
@@ -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 (file)
index 0000000..b50c198
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>
index f319580964a9708a4141cbcf0279217c0d19152a..52080575867d28cd8291d9a1673caf6e48ef0cb0 100644 (file)
@@ -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
index c01ff24dfef326c6fadfbf2036a89f9b73173fb7..d38ebfb510238638170191d77ed6fc6cdea7ae6c 100644 (file)
@@ -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
index f5ec8742dca3d1a741cac1bdecc1918bb1b1800b..1157dcf398c0bf203e0b2f3798e93fca05e598ee 100644 (file)
@@ -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
index 9b7d87b3299f1376776fd94f017ff8273a94515a..547e7bcd9fe941cefc37ef9967c59464318175a9 100644 (file)
@@ -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
index d193f995612daf3026a78b5fe2e15cc51e2e3a21..4bdd605269bb7a3b71b97c66fc0245ae91121759 100644 (file)
@@ -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
index eae2c55d38f6e3e73e06d95564709bd42f0bd856..087e29790e32d0a3658b5dbf691f4fb4ee324811 100644 (file)
@@ -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
index 9796e8d37bf56a8ca029dad60fe54187fc1916c7..fff5eb17b3ccfdc07aba8cef38475abed57aa38c 100644 (file)
@@ -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
index 9b7d87b3299f1376776fd94f017ff8273a94515a..547e7bcd9fe941cefc37ef9967c59464318175a9 100644 (file)
@@ -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
index f73ad1a35c798b842b2ce5b5b02122accde513a6..5f422643b14347ddf3dda906442b09ddb069fb3f 100644 (file)
@@ -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
index dcb7dbba914cf34c605f500f90edeed6eaa94c7d..bbeeebf776c7f5966b4df8dd2e228467d944972c 100644 (file)
@@ -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
index 1146e2d6fd56f62d35189a30b700e25e7655c327..93405d1641ce22040e8c0c6b7c61ebd670c22688 100644 (file)
@@ -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
index d9c830da42476c42b00d982fd0688bde3fcbff91..33f67a5d3d0a64132a3e29619aa55197a640f918 100644 (file)
@@ -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
index 0902ca01f21aec9b6fe0e7a2ecc31053620b49ff..ecbe596898d11750880e5f499f2de33685da3641 100644 (file)
@@ -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
index 3e9e5e75fd264e290d5e3c38f40231d7e30f5322..a47fca400ab36953676caca91e523ed3d2fb1d29 100644 (file)
@@ -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
index 7a3c6be1f42420def01aa9a482b09fcb062ca498..ca7095fe72a66dde8cf7c22f80f35cea2cc23f99 100644 (file)
@@ -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
index d50c82c7c8241a36909f36e04bbb919ef99f11d1..554dcd2623334e51cfd854d35c808edc94c3798a 100644 (file)
@@ -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
index cbf2ad3ca67b785aec728a40b22fa571c835c176..9c6cf06d139b8bebceac6deac78622649f78a2bd 100644 (file)
@@ -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
index 382455c9cf66f42d708cbe386c11dfa966ea5dc0..be5d286bf2215d744b8586ea3cb546cc9c4e60ce 100644 (file)
@@ -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
index 92b794bf1237d3bd3f1f87b7dd485b8a60856d0b..512fbc863073a1ec0401b1ec3d53a95a504e0f32 100644 (file)
@@ -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
index 3320f1403a7f05b25edfe99bc0b7c1d4300d0329..09d97d6f521c540351d5eb2fc4ed08a81a1a3383 100644 (file)
@@ -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
index 2a10a0ffb95d59e6121662a56752d48957ea2b80..3240ff6aa3be40be168db9d1bea1e929cf6753bc 100644 (file)
@@ -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
index ebbc58da91c55cec66080725af552a3239ffeab5..351331beb715e7c9c4e660b56b5aeaf126823451 100644 (file)
@@ -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
index 3e02619df9dba5a98cba6a07f8f4512f96e44cec..087f4db051776b082ee18c892623c1c91e0dffa9 100644 (file)
@@ -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
index 03cd62fd6fa1081f9f3cb749fbcfe2e9608a1c6c..e9a1cc0d5cdcc05b1972991bfd9079eef2be4662 100644 (file)
@@ -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
index 73c1e7fb897544a1a06e80f354bb9df6c9f20b40..2c5bfaeed7e9c31f03069a6a09b53f01105668c8 100644 (file)
@@ -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>
index 8971b655ca9935f442e50aaad2641ca8cb722696..7ec1a0ac848ad8a1f4879bf626752a9dc31ee9d4 100644 (file)
@@ -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>
index 084073c93615fb6f87ae42743a6e59d1668fe3cf..207ffcd2f1bf5e95aa28451486496d70d79253e2 100644 (file)
@@ -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 (file)
index 0000000..b50c198
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_pow.c>