]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove the error handling wrapper from exp and exp2
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Thu, 22 Feb 2018 11:34:40 +0000 (11:34 +0000)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 21 Nov 2018 09:55:02 +0000 (09:55 +0000)
Introduce new exp and exp2 symbol version that don'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 double precision wrappers are disabled for sysdeps/ieee754/dbl-64
by using empty w_exp.c and w_exp2.c files, the math/w_exp.c and
math/w_exp2.c files use the wrapper template and can be included by
targets that have their own exp and exp2 implementations or use ifunc
on the glibc internal __ieee754_exp symbol.

The compatibility symbol versions still use 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 expl and exp2l were aliases of exp and exp2,
now they point to the compatibility symbols with the wrapper, because
they 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 _finite symbols are now aliases of the standard symbols (they have
no performance advantage anymore).  Both the standard symbols and
_finite symbols 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 (the new macro name is __exp instead of __ieee754_exp
which breaks some math.h macros).

Tested with build-many-glibcs.py.

* math/Versions (GLIBC_2.29): Add exp and exp2.
* math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
symbol, handle NO_LONG_DOUBLE and LONG_DOUBLE_COMPAT explicitly.
* math/w_exp_compat.c (__exp_compat): Likewise.
* math/w_exp.c: New file.
* math/w_exp2.c: New file.
* sysdeps/i386/fpu/w_exp.c: New file.
* sysdeps/i386/fpu/w_exp2.c: New file.
* sysdeps/ia64/fpu/e_exp.S: Add versioned symbols.
* sysdeps/ia64/fpu/e_exp2.S: Likewise.
* sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Rename to __exp
and add necessary aliases.
* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Rename to __exp2
and add necessary aliases.
* sysdeps/ieee754/dbl-64/w_exp.c: New file.
* sysdeps/ieee754/dbl-64/w_exp2.c: New file.
* sysdeps/m68k/m680x0/fpu/w_exp.c: New file.
* sysdeps/m68k/m680x0/fpu/w_exp2.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_exp-avx.c (__exp1): Remove.
(__ieee754_exp): Rename to __exp.
* sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__exp1): Remove.
(__ieee754_exp): Rename to __exp.
* sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__exp1): Remove.
(__ieee754_exp): Rename to __exp.
* sysdeps/x86_64/fpu/multiarch/e_exp.c (__ieee754_exp): Rename to
__exp.
* sysdeps/x86_64/fpu/multiarch/w_exp.c: New file.

45 files changed:
ChangeLog
math/Versions
math/w_exp.c [new file with mode: 0644]
math/w_exp2.c [new file with mode: 0644]
math/w_exp2_compat.c
math/w_exp_compat.c
sysdeps/i386/fpu/w_exp.c [new file with mode: 0644]
sysdeps/i386/fpu/w_exp2.c [new file with mode: 0644]
sysdeps/ia64/fpu/e_exp.S
sysdeps/ia64/fpu/e_exp2.S
sysdeps/ieee754/dbl-64/e_exp.c
sysdeps/ieee754/dbl-64/e_exp2.c
sysdeps/ieee754/dbl-64/w_exp.c [new file with mode: 0644]
sysdeps/ieee754/dbl-64/w_exp2.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_exp.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_exp2.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_exp-avx.c
sysdeps/x86_64/fpu/multiarch/e_exp-fma.c
sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c
sysdeps/x86_64/fpu/multiarch/e_exp.c
sysdeps/x86_64/fpu/multiarch/w_exp.c [new file with mode: 0644]

index 9cdd3bad3649da1811a74dc63a4825b951e24b7b..5968aa4ee0eecb490e96f6e382ea8bd567d0f9d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+2018-11-21  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       * math/Versions (GLIBC_2.29): Add exp and exp2.
+       * math/w_exp2_compat.c (__exp2_compat): Change to versioned compat
+       symbol, handle NO_LONG_DOUBLE and LONG_DOUBLE_COMPAT explicitly.
+       * math/w_exp_compat.c (__exp_compat): Likewise.
+       * math/w_exp.c: New file.
+       * math/w_exp2.c: New file.
+       * sysdeps/i386/fpu/w_exp.c: New file.
+       * sysdeps/i386/fpu/w_exp2.c: New file.
+       * sysdeps/ia64/fpu/e_exp.S: Add versioned symbols.
+       * sysdeps/ia64/fpu/e_exp2.S: Likewise.
+       * sysdeps/ieee754/dbl-64/e_exp.c (__ieee754_exp): Rename to __exp
+       and add necessary aliases.
+       * sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Rename to __exp2
+       and add necessary aliases.
+       * sysdeps/ieee754/dbl-64/w_exp.c: New file.
+       * sysdeps/ieee754/dbl-64/w_exp2.c: New file.
+       * sysdeps/m68k/m680x0/fpu/w_exp.c: New file.
+       * sysdeps/m68k/m680x0/fpu/w_exp2.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_exp-avx.c (__exp1): Remove.
+       (__ieee754_exp): Rename to __exp.
+       * sysdeps/x86_64/fpu/multiarch/e_exp-fma.c (__exp1): Remove.
+       (__ieee754_exp): Rename to __exp.
+       * sysdeps/x86_64/fpu/multiarch/e_exp-fma4.c (__exp1): Remove.
+       (__ieee754_exp): Rename to __exp.
+       * sysdeps/x86_64/fpu/multiarch/e_exp.c (__ieee754_exp): Rename to
+       __exp.
+       * sysdeps/x86_64/fpu/multiarch/w_exp.c: New file.
+
 2018-11-20  DJ Delorie  <dj@redhat.com>
 
        * malloc/malloc.c (tcache_entry): Add key field.
index b5a2500712f4fa7d06a7dff5d0fde6147d62d931..29e02d66547efe0850913c066143b78b08ca21f1 100644 (file)
@@ -575,4 +575,8 @@ libm {
     f32xsubf64x; f32xsubf128; f64subf64x; f64subf128;
     f64xsubf128;
   }
+  GLIBC_2.29 {
+    # No SVID compatible error handling.
+    exp; exp2;
+  }
 }
diff --git a/math/w_exp.c b/math/w_exp.c
new file mode 100644 (file)
index 0000000..9a18bd5
--- /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_exp_template.c>
+versioned_symbol (libm, __exp, exp, GLIBC_2_29);
+libm_alias_double_other (__exp, exp)
diff --git a/math/w_exp2.c b/math/w_exp2.c
new file mode 100644 (file)
index 0000000..6c84871
--- /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_exp2_template.c>
+versioned_symbol (libm, __exp2, exp2, GLIBC_2_29);
+libm_alias_double_other (__exp2, exp2)
index 7ab618292f1e7c76b21d21d0951fd2a8cf968b1f..567383d001dc9a395a2bece9aad1bb17b3cb7017 100644 (file)
@@ -7,9 +7,11 @@
 #include <math-svid-compat.h>
 #include <libm-alias-double.h>
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29) \
+                        || defined NO_LONG_DOUBLE \
+                        || defined LONG_DOUBLE_COMPAT)
 double
-__exp2 (double x)
+__exp2_compat (double x)
 {
   double z = __ieee754_exp2 (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -19,5 +21,17 @@ __exp2 (double x)
 
   return z;
 }
-libm_alias_double (__exp2, exp2)
+# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_29)
+compat_symbol (libm, __exp2_compat, exp2, GLIBC_2_1);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__exp2_compat, exp2l)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__exp2_compat, __exp2_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_exp2l (
+  compat_symbol (libm, __exp2_compat_alias, exp2l, FIRST_VERSION_libm_exp2l), );
+# endif
 #endif
index ccda100075635035c65d078eb796397198552f8c..df0137cb65e95e93f0e9267fbc9e948a93623d5f 100644 (file)
 #include <math-svid-compat.h>
 #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 exp */
 double
-__exp (double x)
+__exp_compat (double x)
 {
   double z = __ieee754_exp (x);
   if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -33,6 +35,17 @@ __exp (double x)
 
   return z;
 }
-libm_hidden_def (__exp)
-libm_alias_double (__exp, exp)
+# if SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_29)
+compat_symbol (libm, __exp_compat, exp, GLIBC_2_0);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__exp_compat, expl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+/* Work around gas bug "multiple versions for symbol".  */
+weak_alias (__exp_compat, __exp_compat_alias)
+
+LONG_DOUBLE_COMPAT_CHOOSE_libm_expl (
+  compat_symbol (libm, __exp_compat_alias, expl, FIRST_VERSION_libm_expl), );
+# endif
 #endif
diff --git a/sysdeps/i386/fpu/w_exp.c b/sysdeps/i386/fpu/w_exp.c
new file mode 100644 (file)
index 0000000..27eee98
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>
diff --git a/sysdeps/i386/fpu/w_exp2.c b/sysdeps/i386/fpu/w_exp2.c
new file mode 100644 (file)
index 0000000..e0636a7
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp2.c>
index c8cebeb17788463567e1c19ac89ce5b8522bffac..4774a43768085a7ed43b5b0c8f85b5cd8b90e8cd 100644 (file)
@@ -739,6 +739,12 @@ EXP_UNDERFLOW_ZERO:
 
 GLOBAL_IEEE754_END(exp)
 libm_alias_double_other (__exp, exp)
+#ifdef SHARED
+.symver exp,exp@@GLIBC_2.29
+.weak __exp_compat
+.set __exp_compat,__exp
+.symver __exp_compat,exp@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
index 18711866a1057c73cae46e64d0f7b2ef483a853a..97b69263e423e6583b04d39fe1f601ba57a1bb53 100644 (file)
@@ -227,7 +227,7 @@ LOCAL_OBJECT_END(T_table)
 
 
 .section .text
-GLOBAL_LIBM_ENTRY(exp2)
+WEAK_LIBM_ENTRY(exp2)
 
 
 {.mfi
@@ -493,8 +493,14 @@ OUT_RANGE_exp2:
 }
 ;;
 
-GLOBAL_LIBM_END(exp2)
-libm_alias_double_other (exp2, exp2)
+WEAK_LIBM_END(exp2)
+libm_alias_double_other (__exp2, exp2)
+#ifdef SHARED
+.symver exp2,exp2@@GLIBC_2.29
+.weak __exp2_compat
+.set __exp2_compat,__exp2
+.symver __exp2_compat,exp2@GLIBC_2.2
+#endif
 
 
 LOCAL_LIBM_ENTRY(__libm_error_region)
index 37fdafcfa006d1f1f5275d83b410c282710a4457..9e55c50a4de8354d11087178d533792fc901d8ce 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"
 
 #define N (1 << EXP_TABLE_BITS)
@@ -91,7 +94,7 @@ top12 (double x)
 
 double
 SECTION
-__ieee754_exp (double x)
+__exp (double x)
 {
   uint32_t abstop;
   uint64_t ki, idx, top, sbits;
@@ -153,6 +156,14 @@ __ieee754_exp (double x)
      is no spurious underflow here even without fma.  */
   return scale + scale * tmp;
 }
-#ifndef __ieee754_exp
-strong_alias (__ieee754_exp, __exp_finite)
+#ifndef __exp
+hidden_def (__exp)
+strong_alias (__exp, __ieee754_exp)
+strong_alias (__exp, __exp_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __exp, exp, GLIBC_2_29);
+libm_alias_double_other (__exp, exp)
+# else
+libm_alias_double (__exp, exp)
+# endif
 #endif
index 96afcf9c2097a91c8953f9296d1dbf727cb859c6..48741e84529b55dc8b7f6a242b966dc94f7f7af4 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"
 
 #define N (1 << EXP_TABLE_BITS)
@@ -84,7 +87,7 @@ top12 (double x)
 }
 
 double
-__ieee754_exp2 (double x)
+__exp2 (double x)
 {
   uint32_t abstop;
   uint64_t ki, idx, top, sbits;
@@ -140,6 +143,13 @@ __ieee754_exp2 (double x)
      is no spurious underflow here even without fma.  */
   return scale + scale * tmp;
 }
-#ifndef __ieee754_exp2
-strong_alias (__ieee754_exp2, __exp2_finite)
+#ifndef __exp2
+strong_alias (__exp2, __ieee754_exp2)
+strong_alias (__exp2, __exp2_finite)
+# if LIBM_SVID_COMPAT
+versioned_symbol (libm, __exp2, exp2, GLIBC_2_29);
+libm_alias_double_other (__exp2, exp2)
+# else
+libm_alias_double (__exp2, exp2)
+# endif
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_exp.c b/sysdeps/ieee754/dbl-64/w_exp.c
new file mode 100644 (file)
index 0000000..1cc8931
--- /dev/null
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/ieee754/dbl-64/w_exp2.c b/sysdeps/ieee754/dbl-64/w_exp2.c
new file mode 100644 (file)
index 0000000..1cc8931
--- /dev/null
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp.c b/sysdeps/m68k/m680x0/fpu/w_exp.c
new file mode 100644 (file)
index 0000000..27eee98
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp2.c b/sysdeps/m68k/m680x0/fpu/w_exp2.c
new file mode 100644 (file)
index 0000000..e0636a7
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp2.c>
index fd0a277bdc40daa9e1121f625c20cafdcd2e6704..ff0a06fdb83916ac12033beb0c5ad2fc68643d81 100644 (file)
@@ -1068,3 +1068,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 37e99a91bc344d1e8bd5dd0e67c350c466bfd7d3..cfb8f7d72992eb401e2d0e2fc17615616bafec35 100644 (file)
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 2773d61cd15b6efab64170097dba435c15e96c4c..8a7f92f5483c456485e1c9063e42a3fe4f358822 100644 (file)
@@ -1043,6 +1043,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.3.4 __c1_cabsf F
 GLIBC_2.3.4 __c1_cacosf F
 GLIBC_2.3.4 __c1_cacoshf F
index e126eb07e3081b370a9d1d5553f596ccfb0d31a4..a4a2c9b5e044f90160e998635d7e0ee516d5b817 100644 (file)
@@ -453,6 +453,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
index 679bbfbd590c64910616c050b0de9d63bd314267..c665d65ef1f4dffb664080997d733297a2f1fc46 100644 (file)
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 exp2l F
index 3110c1f4fa58d3781d5507d69f1a7835e84cee5d..6728695daa3af588ff84f023019caa9bdd2a96b0 100644 (file)
@@ -1075,3 +1075,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 33a99ff6784cf05a4bce830b29c4585934f4632e..3a5d2fb84d725e06f37a3515d650431f693da4b3 100644 (file)
@@ -1005,3 +1005,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index e126eb07e3081b370a9d1d5553f596ccfb0d31a4..a4a2c9b5e044f90160e998635d7e0ee516d5b817 100644 (file)
@@ -453,6 +453,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
index 40ac529f7f51978dd1c9f1c92e571a6689e62556..84a580a3a0ffa1fe75390ff7f290d6ca9b1cd1c2 100644 (file)
@@ -804,3 +804,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 4a2c2e669eadf12e42027e70ca9db274de823abf..f2c3143b70623cc31d51ed95a447bc5971fe4d3a 100644 (file)
@@ -765,3 +765,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index ff011f86f2bf429a2a4637605bb05cb9c826d1f3..7ecaeea9d55741eff2166eb1f969a3f2c0dcc2ab 100644 (file)
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 exp2l F
index c19ee985a6b7ebb2ffed4b1048b62458ab1bdae7..c3679e812cb2116d7d11f7f27084943341a2c44c 100644 (file)
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 2ed649a655a3ee0056a7d9f3fc5235b4b5d595b9..2964682f198e5d9d3b78cb0cb2d731099ab7b340 100644 (file)
@@ -765,3 +765,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 511b24b76401bc600d2562059e0533ce08d9647f..f7ceb788cee6da7f2fda0dc648d2f94bf45cd575 100644 (file)
@@ -810,6 +810,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index a6e4e4edaadbf2975a2a4143331682f2fdc3f457..7e1c1b559ad56d3ddeca9235211042d825520a60 100644 (file)
@@ -809,6 +809,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 1e1f2b8d6e2d5748a19674ef505696ddb681f324..de18417d4653bf61e8ef2693b9dc127bd02e96ea 100644 (file)
@@ -1076,3 +1076,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 331449dfcb5f5496044ce1b2b604cbc60948eda2..6dd35dbb28de552a475ab43f4fbc6a4b8fa65d73 100644 (file)
@@ -488,6 +488,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.3 _LIB_VERSION D 0x4
 GLIBC_2.3 __clog10 F
 GLIBC_2.3 __clog10f F
index 643aa55498fc2e9133cd8fcf50a7ba471ac656d1..b33b21431f441a1090a46ae08183849ef6950a4b 100644 (file)
@@ -1033,6 +1033,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 8cc5fdfc0b49c68bc864130c68bf15f6c5edb642..567059b0540c43ad5126cf23d1b1b596a56d6818 100644 (file)
@@ -1033,6 +1033,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 43525fccf681f5b2cfe264ff7bdd497daa4e79fe..baea13116d0e9d2b396836946d028879ea78116d 100644 (file)
@@ -764,4 +764,6 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 exp2l F
index fd973676e2f54abd1a021f873e0c71178f308b18..7249346330554ebd027f7c88e9d8c19f60cf5ebc 100644 (file)
@@ -1040,6 +1040,8 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
index 470e64f4efa4c6ba8d1d0148713baeef8e0a8a5b..629fb08f544e83eba3e1d1dde1a7c0ba29e41cab 100644 (file)
@@ -1032,3 +1032,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index 4a442c39899aafcdb3c12c1286898a37d9c906c3..ac703100df89e6a15834732bb30c349ef6a19f33 100644 (file)
@@ -1066,3 +1066,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index f1fc0e9f4d5ffdb768fcf31af1e95dc24a2d6186..55098e04c81512471c22f5a191e70f6e3afc0dbf 100644 (file)
@@ -1066,3 +1066,5 @@ GLIBC_2.28 fmul F
 GLIBC_2.28 fmull F
 GLIBC_2.28 fsub F
 GLIBC_2.28 fsubl F
+GLIBC_2.29 exp F
+GLIBC_2.29 exp2 F
index afd917442aba2f9fc4ba10d5f8d26d031b692834..9044823feb01747f6392a9d29957ad5b2a06bc80 100644 (file)
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_avx
-#define __exp1 __exp1_avx
+#include <math.h>
+#define __exp __ieee754_exp_avx
 #define SECTION __attribute__ ((section (".text.avx")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
index 765b1b9dd34ac150b0a7ff700bb460c8da11d7e6..9d6e544ee0d6e7fcf943fd8c65a9cebc98a341f7 100644 (file)
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_fma
-#define __exp1 __exp1_fma
+#include <math.h>
+#define __exp __ieee754_exp_fma
 #define SECTION __attribute__ ((section (".text.fma")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
index 9ac7acad28036633f469920cdae1f132a34d72f0..25643b6ad702746514ea847e70c0726dd977ff63 100644 (file)
@@ -1,5 +1,5 @@
-#define __ieee754_exp __ieee754_exp_fma4
-#define __exp1 __exp1_fma4
+#include <math.h>
+#define __exp __ieee754_exp_fma4
 #define SECTION __attribute__ ((section (".text.fma4")))
 
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
index 7cd7d1729ccc0e569072c932b64b144f6b2b4511..26e614fa70ed3cb308711f1320bc8bdc77c00054 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_exp (double);
 
 #define SYMBOL_NAME ieee754_exp
@@ -25,5 +27,5 @@ libc_ifunc_redirected (__redirect_ieee754_exp, __ieee754_exp,
                       IFUNC_SELECTOR ());
 strong_alias (__ieee754_exp, __exp_finite)
 
-#define __ieee754_exp __ieee754_exp_sse2
+#define __exp __ieee754_exp_sse2
 #include <sysdeps/ieee754/dbl-64/e_exp.c>
diff --git a/sysdeps/x86_64/fpu/multiarch/w_exp.c b/sysdeps/x86_64/fpu/multiarch/w_exp.c
new file mode 100644 (file)
index 0000000..27eee98
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/../math/w_exp.c>