aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilco Dijkstra <wilco.dijkstra@arm.com>2024-01-09 15:32:08 +0000
committerWilco Dijkstra <wilco.dijkstra@arm.com>2024-01-12 16:02:12 +0000
commit08ddd26814310e7c1b8c3956a6a0ac7aedea9cfd (patch)
tree2fab0f0ec2a9aa86d9488c09e4fed39a04f852da
parent7c14d8a985416986256f68568313cdb36f559821 (diff)
downloadglibc-08ddd26814310e7c1b8c3956a6a0ac7aedea9cfd.zip
glibc-08ddd26814310e7c1b8c3956a6a0ac7aedea9cfd.tar.gz
glibc-08ddd26814310e7c1b8c3956a6a0ac7aedea9cfd.tar.bz2
math: remove exp10 wrappers
Remove the error handling wrapper from exp10. This is very similar to the changes done to exp and exp2, except that we also need to handle pow10 and pow10l. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r--math/Versions4
-rw-r--r--math/w_exp10_compat.c32
-rw-r--r--sysdeps/i386/fpu/w_exp10_compat.c3
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp10.c13
-rw-r--r--sysdeps/ieee754/dbl-64/w_exp10.c1
-rw-r--r--sysdeps/m68k/m680x0/fpu/w_exp10_compat.c3
-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/be/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/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/be/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/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/be/libm.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/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
29 files changed, 71 insertions, 8 deletions
diff --git a/math/Versions b/math/Versions
index 759b5fa..26e15ce 100644
--- a/math/Versions
+++ b/math/Versions
@@ -635,4 +635,8 @@ libm {
# No SVID compatible error handling.
fmod; fmodf;
}
+ GLIBC_2.39 {
+ # No SVID compatible error handling.
+ exp10;
+ }
}
diff --git a/math/w_exp10_compat.c b/math/w_exp10_compat.c
index d8e0f7e..6b72aef 100644
--- a/math/w_exp10_compat.c
+++ b/math/w_exp10_compat.c
@@ -25,9 +25,15 @@
#include <math-svid-compat.h>
#include <libm-alias-double.h>
-#if LIBM_SVID_COMPAT
+#ifndef NO_COMPAT_NEEDED
+# define NO_COMPAT_NEEDED 0
+#endif
+
+#if LIBM_SVID_COMPAT && (SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_39) \
+ || defined NO_LONG_DOUBLE \
+ || defined LONG_DOUBLE_COMPAT)
double
-__exp10 (double x)
+__exp10_compat (double x)
{
double z = __ieee754_exp10 (x);
if (__builtin_expect (!isfinite (z) || z == 0, 0)
@@ -37,14 +43,30 @@ __exp10 (double x)
return z;
}
-libm_alias_double (__exp10, exp10)
+# if NO_COMPAT_NEEDED
+# ifdef SHARED
+libm_alias_double (__exp10_compat, exp10)
+# endif
+#else
+# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_39)
+compat_symbol (libm, __exp10_compat, exp10, GLIBC_2_1);
+# endif
+# ifdef NO_LONG_DOUBLE
+weak_alias (__exp10_compat, exp10l)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+LONG_DOUBLE_COMPAT_CHOOSE_libm_exp10l (
+ compat_symbol (libm, __exp10_compat, exp10l, FIRST_VERSION_libm_exp10l), );
+# endif
+# endif
+
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
-strong_alias (__exp10, __pow10)
+strong_alias (__exp10_compat, __pow10)
compat_symbol (libm, __pow10, pow10, GLIBC_2_1);
# endif
# ifdef NO_LONG_DOUBLE
# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_27)
-strong_alias (__exp10l, __pow10l)
+strong_alias (exp10l, __pow10l)
compat_symbol (libm, __pow10l, pow10l, GLIBC_2_1);
# endif
# endif
diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
new file mode 100644
index 0000000..b534553
--- /dev/null
+++ b/sysdeps/i386/fpu/w_exp10_compat.c
@@ -0,0 +1,3 @@
+/* i386 provides an optimized __ieee754_exp10. */
+#define NO_COMPAT_NEEDED 1
+#include <math/w_exp10_compat.c>
diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
index 0d4e428..225fc74 100644
--- a/sysdeps/ieee754/dbl-64/e_exp10.c
+++ b/sysdeps/ieee754/dbl-64/e_exp10.c
@@ -18,9 +18,9 @@
#include <math.h>
#include <math-barriers.h>
#include <math-narrow-eval.h>
-#include <math_private.h>
-#include <float.h>
+#include <math-svid-compat.h>
#include <libm-alias-finite.h>
+#include <libm-alias-double.h>
#include "math_config.h"
#define N (1 << EXP_TABLE_BITS)
@@ -75,7 +75,7 @@ special_case (uint64_t sbits, double_t tmp, uint64_t ki)
/* Double-precision 10^x approximation. Largest observed error is ~0.513 ULP. */
double
-__ieee754_exp10 (double x)
+__exp10 (double x)
{
uint64_t ix = asuint64 (x);
uint32_t abstop = (ix >> 52) & 0x7ff;
@@ -144,4 +144,11 @@ __ieee754_exp10 (double x)
return s * y + s;
}
+strong_alias (__exp10, __ieee754_exp10)
libm_alias_finite (__ieee754_exp10, __exp10)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __exp10, exp10, GLIBC_2_39);
+libm_alias_double_other (__exp10, exp10)
+#else
+libm_alias_double (__exp10, exp10)
+#endif
diff --git a/sysdeps/ieee754/dbl-64/w_exp10.c b/sysdeps/ieee754/dbl-64/w_exp10.c
new file mode 100644
index 0000000..1cc8931
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_exp10.c
@@ -0,0 +1 @@
+/* Not needed. */
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
new file mode 100644
index 0000000..0d3e718
--- /dev/null
+++ b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
@@ -0,0 +1,3 @@
+/* m68k provides an optimized __ieee754_exp10. */
+#define NO_COMPAT_NEEDED 1
+#include <math/w_exp10_compat.c>
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index e3924c3..f0da228 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 066dd1a..f5d8023 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1205,6 +1205,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index 4adfed0..f020a8a 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -535,6 +535,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index 4adfed0..f020a8a 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -535,6 +535,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 5c3f47c..450ac03 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -846,4 +846,5 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 4adfed0..f020a8a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -535,6 +535,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index ea0dbd4..1f7f63f 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -847,3 +847,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index ea0dbd4..1f7f63f 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -847,3 +847,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 7c94a8d..797071a 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -846,4 +846,5 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 0d08245..1475870 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index a3b776f..c0ebe11 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -847,3 +847,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index c696215..4f88e0a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -892,6 +892,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 a5ce9b1..edc2614 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -891,6 +891,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index 8e41056..0a8a143 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -885,6 +885,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 939f29a..5174d20 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1320,3 +1320,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 4baefb1..5ff11fb 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1149,6 +1149,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 debb767..0e246c2 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1149,6 +1149,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
GLIBC_2.4 __clog10l F
GLIBC_2.4 __finitel F
GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index fb94386..7b43a86 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -846,4 +846,5 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index fb94386..7b43a86 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -846,4 +846,5 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 2fdb5ff..e3dcf3d 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1156,6 +1156,7 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 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 02d4c3a..20fef20 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1148,3 +1148,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index cc8be5b..c1c5c76 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1181,3 +1181,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index fda4df2..fac219d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1181,3 +1181,4 @@ GLIBC_2.35 hypot F
GLIBC_2.35 hypotf F
GLIBC_2.38 fmod F
GLIBC_2.38 fmodf F
+GLIBC_2.39 exp10 F