From 08ddd26814310e7c1b8c3956a6a0ac7aedea9cfd Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Tue, 9 Jan 2024 15:32:08 +0000 Subject: [PATCH] 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 --- math/Versions | 4 +++ math/w_exp10_compat.c | 32 ++++++++++++++++++---- sysdeps/i386/fpu/w_exp10_compat.c | 3 ++ sysdeps/ieee754/dbl-64/e_exp10.c | 13 +++++++-- sysdeps/ieee754/dbl-64/w_exp10.c | 1 + sysdeps/m68k/m680x0/fpu/w_exp10_compat.c | 3 ++ sysdeps/unix/sysv/linux/aarch64/libm.abilist | 1 + sysdeps/unix/sysv/linux/alpha/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/arm/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libm.abilist | 1 + sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist | 1 + sysdeps/unix/sysv/linux/microblaze/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/microblaze/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/mips/mips32/libm.abilist | 1 + sysdeps/unix/sysv/linux/mips/mips64/libm.abilist | 1 + sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 + .../sysv/linux/powerpc/powerpc32/fpu/libm.abilist | 1 + .../linux/powerpc/powerpc32/nofpu/libm.abilist | 1 + .../sysv/linux/powerpc/powerpc64/be/libm.abilist | 1 + .../sysv/linux/powerpc/powerpc64/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist | 1 + sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/be/libm.abilist | 1 + sysdeps/unix/sysv/linux/sh/le/libm.abilist | 1 + sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist | 1 + sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist | 1 + sysdeps/unix/sysv/linux/x86_64/64/libm.abilist | 1 + sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist | 1 + 29 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 sysdeps/i386/fpu/w_exp10_compat.c create mode 100644 sysdeps/ieee754/dbl-64/w_exp10.c create mode 100644 sysdeps/m68k/m680x0/fpu/w_exp10_compat.c diff --git a/math/Versions b/math/Versions index 759b5fac7f..26e15cedea 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 d8e0f7e773..6b72aef7bd 100644 --- a/math/w_exp10_compat.c +++ b/math/w_exp10_compat.c @@ -25,9 +25,15 @@ #include #include -#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 0000000000..b53455386e --- /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 diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c index 0d4e42833a..225fc74c4c 100644 --- a/sysdeps/ieee754/dbl-64/e_exp10.c +++ b/sysdeps/ieee754/dbl-64/e_exp10.c @@ -18,9 +18,9 @@ #include #include #include -#include -#include +#include #include +#include #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 0000000000..1cc8931700 --- /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 0000000000..0d3e718626 --- /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 diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index e3924c3499..f0da228fbb 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 066dd1a6b3..f5d8023d62 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 4adfed072b..f020a8a904 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 4adfed072b..f020a8a904 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 5c3f47caef..450ac03223 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 4adfed072b..f020a8a904 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 ea0dbd4b72..1f7f63f60c 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 ea0dbd4b72..1f7f63f60c 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 7c94a8db70..797071aee8 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 0d08245adf..14758703cf 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 a3b776fece..c0ebe119dc 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 c696215739..4f88e0af9c 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 a5ce9b1997..edc26140dc 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 8e41056d0d..0a8a1433d7 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 939f29a0f2..5174d20032 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 4baefb1217..5ff11fb54f 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 debb767575..0e246c2c54 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 fb94386fff..7b43a866e2 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 fb94386fff..7b43a866e2 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 2fdb5ff145..e3dcf3d4e7 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 02d4c3a754..20fef20c8b 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 cc8be5b510..c1c5c76e26 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 fda4df2653..fac219d45a 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 -- 2.11.4.GIT