Message ID | 20240327194024.1409677-5-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | Fix some libm static issues | expand |
On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > > The resulting performance is similiar (Ryzen 5900, gcc 13.2.1): > > * sysdeps/i386/fpu/e_fmodf.S > "fmodf": { > "subnormals": { > "duration": 3.68732e+09, > "iterations": 2.2912e+08, > "max": 71.447, > "min": 15.836, > "mean": 16.0934 > }, > "normal": { > "duration": 3.75848e+09, > "iterations": 5.5296e+07, > "max": 273.208, > "min": 15.725, > "mean": 67.9702 > }, > "close-exponents": { > "duration": 3.69035e+09, > "iterations": 2.07872e+08, > "max": 64.454, > "min": 15.762, > "mean": 17.753 > } > } > > * master > "fmodf": { > "subnormals": { > "duration": 3.6863e+09, > "iterations": 2.23616e+08, > "max": 65.453, > "min": 16.243, > "mean": 16.485 > }, > "normal": { > "duration": 3.71129e+09, > "iterations": 5.3248e+07, > "max": 281.57, > "min": 16.169, > "mean": 69.6983 > }, > "close-exponents": { > "duration": 3.70274e+09, > "iterations": 2.03776e+08, > "max": 81.474, > "min": 16.206, > "mean": 18.1706 > } > } > --- > sysdeps/i386/fpu/Versions | 2 +- > sysdeps/i386/fpu/e_fmodf.S | 18 ------------------ > sysdeps/i386/fpu/e_fmodf.c | 2 ++ > sysdeps/i386/fpu/w_fmodf_compat.c | 15 --------------- > sysdeps/ieee754/flt-32/e_fmodf.c | 5 ++++- > sysdeps/mach/hurd/i386/libm.abilist | 1 + > sysdeps/unix/sysv/linux/i386/libm.abilist | 1 + > 7 files changed, 9 insertions(+), 35 deletions(-) > delete mode 100644 sysdeps/i386/fpu/e_fmodf.S > create mode 100644 sysdeps/i386/fpu/e_fmodf.c > delete mode 100644 sysdeps/i386/fpu/w_fmodf_compat.c > > diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions > index d37bc1eae6..9509f9b7c7 100644 > --- a/sysdeps/i386/fpu/Versions > +++ b/sysdeps/i386/fpu/Versions > @@ -5,6 +5,6 @@ libm { > } > GLIBC_2.40 { > # No SVID compatible error handling. > - fmod; > + fmod; fmodf; > } > } > diff --git a/sysdeps/i386/fpu/e_fmodf.S b/sysdeps/i386/fpu/e_fmodf.S > deleted file mode 100644 > index f73ce9da1e..0000000000 > --- a/sysdeps/i386/fpu/e_fmodf.S > +++ /dev/null > @@ -1,18 +0,0 @@ > -/* > - * Public domain. > - */ > - > -#include <machine/asm.h> > -#include <libm-alias-finite.h> > - > -ENTRY(__ieee754_fmodf) > - flds 8(%esp) > - flds 4(%esp) > -1: fprem > - fstsw %ax > - sahf > - jp 1b > - fstp %st(1) > - ret > -END(__ieee754_fmodf) > -libm_alias_finite (__ieee754_fmodf, __fmodf) > diff --git a/sysdeps/i386/fpu/e_fmodf.c b/sysdeps/i386/fpu/e_fmodf.c > new file mode 100644 > index 0000000000..15a0f960bf > --- /dev/null > +++ b/sysdeps/i386/fpu/e_fmodf.c > @@ -0,0 +1,2 @@ > +#define FMODF_VERSION GLIBC_2_40 > +#include <sysdeps/ieee754/flt-32/e_fmodf.c> > diff --git a/sysdeps/i386/fpu/w_fmodf_compat.c b/sysdeps/i386/fpu/w_fmodf_compat.c > deleted file mode 100644 > index 5a61693e51..0000000000 > --- a/sysdeps/i386/fpu/w_fmodf_compat.c > +++ /dev/null > @@ -1,15 +0,0 @@ > -/* i386 provides an optimized __ieee752_fmodf. */ > -#include <math-svid-compat.h> > -#ifdef SHARED > -# undef SHLIB_COMPAT > -# define SHLIB_COMPAT(a, b, c) 1 > -# undef LIBM_SVID_COMPAT > -# define LIBM_SVID_COMPAT 1 > -# undef compat_symbol > -# define compat_symbol(a, b, c, d) > -# include <math/w_fmodf_compat.c> > -libm_alias_float (__fmod_compat, fmod) > -#else > -#include <math-type-macros-float.h> > -#include <w_fmod_template.c> > -#endif > diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c > index ef95c05800..78071df756 100644 > --- a/sysdeps/ieee754/flt-32/e_fmodf.c > +++ b/sysdeps/ieee754/flt-32/e_fmodf.c > @@ -173,7 +173,10 @@ __fmodf (float x, float y) > } > strong_alias (__fmodf, __ieee754_fmodf) > #if LIBM_SVID_COMPAT > -versioned_symbol (libm, __fmodf, fmodf, GLIBC_2_38); > +# ifndef FMODF_VERSION > +# define FMODF_VERSION GLIBC_2_38 > +# endif > +versioned_symbol (libm, __fmodf, fmodf, FMODF_VERSION); > libm_alias_float_other (__fmod, fmod) > #else > libm_alias_float (__fmod, fmod) > diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist > index 30665f8b1a..88e7538e51 100644 > --- a/sysdeps/mach/hurd/i386/libm.abilist > +++ b/sysdeps/mach/hurd/i386/libm.abilist > @@ -1182,3 +1182,4 @@ GLIBC_2.35 fsqrtl F > GLIBC_2.35 hypot F > GLIBC_2.35 hypotf F > GLIBC_2.40 fmod F > +GLIBC_2.40 fmodf F > diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist > index 44932f111d..c99c60161d 100644 > --- a/sysdeps/unix/sysv/linux/i386/libm.abilist > +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist > @@ -1189,3 +1189,4 @@ GLIBC_2.35 fsqrtl F > GLIBC_2.35 hypot F > GLIBC_2.35 hypotf F > GLIBC_2.40 fmod F > +GLIBC_2.40 fmodf F > -- > 2.34.1 > Need a bug report for ABI change.
diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions index d37bc1eae6..9509f9b7c7 100644 --- a/sysdeps/i386/fpu/Versions +++ b/sysdeps/i386/fpu/Versions @@ -5,6 +5,6 @@ libm { } GLIBC_2.40 { # No SVID compatible error handling. - fmod; + fmod; fmodf; } } diff --git a/sysdeps/i386/fpu/e_fmodf.S b/sysdeps/i386/fpu/e_fmodf.S deleted file mode 100644 index f73ce9da1e..0000000000 --- a/sysdeps/i386/fpu/e_fmodf.S +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Public domain. - */ - -#include <machine/asm.h> -#include <libm-alias-finite.h> - -ENTRY(__ieee754_fmodf) - flds 8(%esp) - flds 4(%esp) -1: fprem - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret -END(__ieee754_fmodf) -libm_alias_finite (__ieee754_fmodf, __fmodf) diff --git a/sysdeps/i386/fpu/e_fmodf.c b/sysdeps/i386/fpu/e_fmodf.c new file mode 100644 index 0000000000..15a0f960bf --- /dev/null +++ b/sysdeps/i386/fpu/e_fmodf.c @@ -0,0 +1,2 @@ +#define FMODF_VERSION GLIBC_2_40 +#include <sysdeps/ieee754/flt-32/e_fmodf.c> diff --git a/sysdeps/i386/fpu/w_fmodf_compat.c b/sysdeps/i386/fpu/w_fmodf_compat.c deleted file mode 100644 index 5a61693e51..0000000000 --- a/sysdeps/i386/fpu/w_fmodf_compat.c +++ /dev/null @@ -1,15 +0,0 @@ -/* i386 provides an optimized __ieee752_fmodf. */ -#include <math-svid-compat.h> -#ifdef SHARED -# undef SHLIB_COMPAT -# define SHLIB_COMPAT(a, b, c) 1 -# undef LIBM_SVID_COMPAT -# define LIBM_SVID_COMPAT 1 -# undef compat_symbol -# define compat_symbol(a, b, c, d) -# include <math/w_fmodf_compat.c> -libm_alias_float (__fmod_compat, fmod) -#else -#include <math-type-macros-float.h> -#include <w_fmod_template.c> -#endif diff --git a/sysdeps/ieee754/flt-32/e_fmodf.c b/sysdeps/ieee754/flt-32/e_fmodf.c index ef95c05800..78071df756 100644 --- a/sysdeps/ieee754/flt-32/e_fmodf.c +++ b/sysdeps/ieee754/flt-32/e_fmodf.c @@ -173,7 +173,10 @@ __fmodf (float x, float y) } strong_alias (__fmodf, __ieee754_fmodf) #if LIBM_SVID_COMPAT -versioned_symbol (libm, __fmodf, fmodf, GLIBC_2_38); +# ifndef FMODF_VERSION +# define FMODF_VERSION GLIBC_2_38 +# endif +versioned_symbol (libm, __fmodf, fmodf, FMODF_VERSION); libm_alias_float_other (__fmod, fmod) #else libm_alias_float (__fmod, fmod) diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist index 30665f8b1a..88e7538e51 100644 --- a/sysdeps/mach/hurd/i386/libm.abilist +++ b/sysdeps/mach/hurd/i386/libm.abilist @@ -1182,3 +1182,4 @@ GLIBC_2.35 fsqrtl F GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.40 fmod F +GLIBC_2.40 fmodf F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index 44932f111d..c99c60161d 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1189,3 +1189,4 @@ GLIBC_2.35 fsqrtl F GLIBC_2.35 hypot F GLIBC_2.35 hypotf F GLIBC_2.40 fmod F +GLIBC_2.40 fmodf F