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 + .../sysv/linux/m68k/coldfire/libm.abilist | 1 + .../sysv/linux/microblaze/be/libm.abilist | 1 + .../sysv/linux/microblaze/le/libm.abilist | 1 + .../unix/sysv/linux/mips/mips32/libm.abilist | 1 + .../unix/sysv/linux/mips/mips64/libm.abilist | 1 + sysdeps/unix/sysv/linux/nios2/libm.abilist | 1 + .../linux/powerpc/powerpc32/fpu/libm.abilist | 1 + .../powerpc/powerpc32/nofpu/libm.abilist | 1 + .../linux/powerpc/powerpc64/be/libm.abilist | 1 + .../linux/powerpc/powerpc64/le/libm.abilist | 1 + .../unix/sysv/linux/s390/s390-32/libm.abilist | 1 + .../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 + .../sysv/linux/sparc/sparc32/libm.abilist | 1 + .../sysv/linux/sparc/sparc64/libm.abilist | 1 + .../unix/sysv/linux/x86_64/64/libm.abilist | 1 + .../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 759b5fac7f4..26e15cedea2 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 d8e0f7e7733..6b72aef7bd5 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 00000000000..b53455386ed --- /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 0d4e42833ae..225fc74c4c5 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 00000000000..1cc89317007 --- /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 00000000000..0d3e7186261 --- /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 e3924c3499d..f0da228fbba 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 066dd1a6b37..f5d8023d624 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 4adfed072b0..f020a8a9043 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 4adfed072b0..f020a8a9043 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 5c3f47caefe..450ac03223c 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 4adfed072b0..f020a8a9043 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 ea0dbd4b727..1f7f63f60cd 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 ea0dbd4b727..1f7f63f60cd 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 7c94a8db706..797071aee8c 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 0d08245adf0..14758703cfb 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 a3b776fece3..c0ebe119dc0 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 c696215739f..4f88e0af9ca 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 a5ce9b19979..edc26140dca 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 8e41056d0d4..0a8a1433d76 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 939f29a0f28..5174d200323 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 4baefb1217b..5ff11fb54f2 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 debb7675759..0e246c2c54f 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 fb94386fffd..7b43a866e20 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 fb94386fffd..7b43a866e20 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 2fdb5ff1450..e3dcf3d4e7e 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 02d4c3a7548..20fef20c8b5 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 cc8be5b510d..c1c5c76e261 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 fda4df26531..fac219d45ab 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.39.5