unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 00/10] Fix some libm static issues
@ 2024-03-27 19:40 Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 01/10] math: Add support for auto static math tests Adhemerval Zanella
                   ` (9 more replies)
  0 siblings, 10 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

Some recent math optimizations removed some symbols from the static
build and due to the limited static build check, along with
--disable-shared being broken for some time [1]; this issue has slipped
some releases.

Although the fix is straightforward, I added an extra framework to
enable static build for select math libraries using the generic type
framework (which autogenerated the tests for all supported types using
the C template files). I have not enabled it for all tests due to the
required extra size constraint, maybe a future
---enable-static-math-tests configure option could improve test
coverage.

As an experiment, I enabled static build for all autogenerated math
tests. This has uncovered some extra missing symbols on some ABIs, along
with some issues with implementation used on static for some ABIs.  On
x86_64/i686 it shows that the assembly optimizations for acos, log10,
log2, and ldbl-96 y0/y1 show some issues.

I tested this patchset on x86_64, i686, armhf, aarch64, and powerpc64le.
The powerpc64le shows some issues with the static linking, due to the
newly enabled tests (using gcc 13.1):

FAIL: math/test-float128-exp10-static
FAIL: math/test-float64x-exp10-static
FAIL: math/test-ibm128-acos-static
FAIL: math/test-ibm128-copysign-static
FAIL: math/test-ibm128-exp10-static
FAIL: math/test-ibm128-fmod-static
FAIL: math/test-ibm128-frexp-static
FAIL: math/test-ibm128-modf-static

I have not analyzed what is happening, but it might be due to the
'-mabi=ibmlongdouble' along with how libgcc.a was built (I saw some
issues on GCC bugzilla). One option could be XFAIL for now.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=20845

Adhemerval Zanella (10):
  math: Add support for auto static math tests
  math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488)
  i386: Use generic fmod
  i386: Use generic fmodf
  math: Fix i386 and m68k exp10 on static build
  i386: Use generic exp10
  math: Fix isnanf128 static build
  math: Provided copysignf128 for static libm on alpha, s390, and
    sparcv9
  math: Provide frexpf128 for static libm on alpha, s390, and sparcv9
  math: Provide modf128 for static libm on alpha, s390, and sparcv9

 math/Makefile                               | 111 +++++++++++++++++++-
 math/test-double-static.h                   |   1 +
 math/test-float-static.h                    |   1 +
 math/test-float128-static.h                 |   1 +
 math/test-float32-static.h                  |   1 +
 math/test-float32x-static.h                 |   1 +
 math/test-float64-static.h                  |   1 +
 math/test-float64x-static.h                 |   1 +
 math/test-ibm128-static.h                   |   1 +
 math/test-ldouble-static.h                  |   1 +
 sysdeps/i386/fpu/Versions                   |   5 +
 sysdeps/i386/fpu/e_exp10.S                  |  51 ---------
 sysdeps/i386/fpu/e_exp10.c                  |   2 +
 sysdeps/i386/fpu/e_exp_data.c               |   1 -
 sysdeps/i386/fpu/e_fmod.S                   |  18 ----
 sysdeps/i386/fpu/e_fmod.c                   |   2 +
 sysdeps/i386/fpu/e_fmodf.S                  |  18 ----
 sysdeps/i386/fpu/e_fmodf.c                  |   2 +
 sysdeps/i386/fpu/math_err.c                 |   1 -
 sysdeps/i386/fpu/w_exp10_compat.c           |   3 -
 sysdeps/i386/fpu/w_fmod_compat.c            |  14 ---
 sysdeps/i386/fpu/w_fmodf_compat.c           |  14 ---
 sysdeps/ieee754/dbl-64/e_exp10.c            |   7 +-
 sysdeps/ieee754/dbl-64/e_fmod.c             |   5 +-
 sysdeps/ieee754/float128/float128_private.h |   2 +-
 sysdeps/ieee754/float128/s_isnanf128.c      |   4 +
 sysdeps/ieee754/flt-32/e_fmodf.c            |   5 +-
 sysdeps/ieee754/ldbl-64-128/s_copysignl.c   |   4 +-
 sysdeps/ieee754/ldbl-64-128/s_frexpl.c      |   4 +-
 sysdeps/ieee754/ldbl-64-128/s_modfl.c       |   4 +-
 sysdeps/ieee754/ldbl-opt/s_ldexpl.c         |   4 +-
 sysdeps/m68k/m680x0/fpu/w_exp10_compat.c    |   9 +-
 sysdeps/m68k/m680x0/fpu/w_fmod_compat.c     |   5 +-
 sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c    |   7 +-
 sysdeps/mach/hurd/i386/libm.abilist         |   3 +
 sysdeps/unix/sysv/linux/i386/libm.abilist   |   3 +
 36 files changed, 175 insertions(+), 142 deletions(-)
 create mode 100644 math/test-double-static.h
 create mode 100644 math/test-float-static.h
 create mode 100644 math/test-float128-static.h
 create mode 100644 math/test-float32-static.h
 create mode 100644 math/test-float32x-static.h
 create mode 100644 math/test-float64-static.h
 create mode 100644 math/test-float64x-static.h
 create mode 100644 math/test-ibm128-static.h
 create mode 100644 math/test-ldouble-static.h
 delete mode 100644 sysdeps/i386/fpu/e_exp10.S
 create mode 100644 sysdeps/i386/fpu/e_exp10.c
 delete mode 100644 sysdeps/i386/fpu/e_exp_data.c
 delete mode 100644 sysdeps/i386/fpu/e_fmod.S
 create mode 100644 sysdeps/i386/fpu/e_fmod.c
 delete mode 100644 sysdeps/i386/fpu/e_fmodf.S
 create mode 100644 sysdeps/i386/fpu/e_fmodf.c
 delete mode 100644 sysdeps/i386/fpu/math_err.c
 delete mode 100644 sysdeps/i386/fpu/w_exp10_compat.c
 delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
 delete mode 100644 sysdeps/i386/fpu/w_fmodf_compat.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v2 01/10] math: Add support for auto static math tests
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 02/10] math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488) Adhemerval Zanella
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

It basically copy the already in place rules for dynamic tests for
auto-generated math functions for all support types.  To avoid the
need to duplicate .inc files, a .SECONDEXPANSION rules is adeed for
the gen-libm-test.py generation.

New tests should be added on the new rules
'libm-test-funcs-auto-static', 'libm-test-funcs-noauto-static', and
'libm-test-funcs-narrow-static'; similar to the non-static
counterparts.
---
 math/Makefile               | 103 +++++++++++++++++++++++++++++++++++-
 math/test-double-static.h   |   1 +
 math/test-float-static.h    |   1 +
 math/test-float128-static.h |   1 +
 math/test-float32-static.h  |   1 +
 math/test-float32x-static.h |   1 +
 math/test-float64-static.h  |   1 +
 math/test-float64x-static.h |   1 +
 math/test-ibm128-static.h   |   1 +
 math/test-ldouble-static.h  |   1 +
 10 files changed, 110 insertions(+), 2 deletions(-)
 create mode 100644 math/test-double-static.h
 create mode 100644 math/test-float-static.h
 create mode 100644 math/test-float128-static.h
 create mode 100644 math/test-float32-static.h
 create mode 100644 math/test-float32x-static.h
 create mode 100644 math/test-float64-static.h
 create mode 100644 math/test-float64x-static.h
 create mode 100644 math/test-ibm128-static.h
 create mode 100644 math/test-ldouble-static.h

diff --git a/math/Makefile b/math/Makefile
index 79ef4ebb65..fb537955fb 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -274,8 +274,10 @@ endif
 
 libm-vec-tests = $(addprefix test-,$(libmvec-tests))
 libm-test-support = $(foreach t,$(test-types),libm-test-support-$(t))
-test-extras += $(libm-test-support)
-extra-test-objs += $(addsuffix .o, $(libm-test-support))
+libm-test-support-static = $(foreach t,$(test-types),libm-test-support-$(t)-static)
+test-extras += $(libm-test-support) $(libm-test-support-static)
+extra-test-objs += $(addsuffix .o, $(libm-test-support)) \
+		   $(addsuffix .o, $(libm-test-support-static))
 libm-vec-test-wrappers = $(addsuffix -wrappers, $(libm-vec-tests))
 test-extras += $(libm-vec-test-wrappers)
 extra-test-objs += $(addsuffix .o, $(libm-vec-test-wrappers))
@@ -364,6 +366,63 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 	$(make-target-directory)
 	$(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out$* -C $@
 
+
+libm-test-funcs-auto-static =
+libm-test-funcs-noauto-static =
+libm-test-funcs-narrow-static =
+libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static)
+
+libm-test-c-auto-static = $(foreach f,$(libm-test-funcs-auto-static),libm-test-$(f)-static.c)
+libm-test-c-noauto-static = $(foreach f,$(libm-test-funcs-noauto-static),libm-test-$(f)-static.c)
+libm-test-c-narrow-static = $(foreach f,$(libm-test-funcs-narrow-static),\
+				 libm-test-narrow-$(f)-static.c)
+generated += $(libm-test-c-auto-static) $(libm-test-c-noauto-static) $(libm-test-c-narrow-static)
+
+libm-tests-normal-static = $(foreach t,$(libm-tests-base-normal),\
+				$(foreach f,$(libm-test-funcs-all-static),\
+					    $(t)-$(f)-static))
+libm-tests-narrow-static = $(foreach t,$(libm-tests-base-narrow-static),\
+				$(foreach f,$(libm-test-funcs-narrow-static),\
+					    $(t)-$(f)-static))
+libm-tests-vector-static = $(foreach t,$(libmvec-tests-static),\
+				$(foreach f,$($(t)-funcs),test-$(t)-$(f)-static))
+libm-tests-static = $(libm-tests-normal-static) $(libm-tests-narrow-static) $(libm-tests-vector-static)
+libm-tests-for-type-static = $(foreach f,$(libm-test-funcs-all-static),\
+					 test-$(1)-$(f)-static test-i$(1)-$(f)-static) \
+			     $(filter test-$(1)-%,$(libm-tests-vector-static) \
+						  $(libm-tests-narrow-static))
+
+libm-tests.o += $(addsuffix .o,$(libm-tests-static))
+
+tests-static += $(libm-tests-static)
+generated += $(addsuffix .c,$(libm-tests)) \
+	     $(foreach t,$(test-types),libm-test-support-$(t)-static.c)
+
+libm-test-c-auto-obj-static = $(addprefix $(objpfx),$(libm-test-c-auto-static))
+libm-test-c-noauto-obj-static = $(addprefix $(objpfx),$(libm-test-c-noauto-static))
+libm-test-c-narrow-obj-static = $(addprefix $(objpfx),$(libm-test-c-narrow-static))
+
+# Use the same input test definitions for both dynamic and static tests.
+.SECONDEXPANSION:
+$(libm-test-c-noauto-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
+							 gen-libm-test.py
+	$(make-target-directory)
+	$(PYTHON) gen-libm-test.py -c $< -a /dev/null -C $@
+
+.SECONDEXPANSION:
+$(libm-test-c-auto-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
+						       gen-libm-test.py \
+						       auto-libm-test-out$$(subst -static,,%)
+	$(make-target-directory)
+	$(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out`echo $* | sed 's/-static//'` -C $@
+
+.SECONDEXPANSION:
+$(libm-test-c-narrow-obj-static): $(objpfx)libm-test%.c: libm-test$$(subst -static,,%).inc \
+							 gen-libm-test.py \
+							 auto-libm-test-out$$(subst -static,,%)
+	$(make-target-directory)
+	$(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out`echo $* | sed 's/-static//'` -C $@
+
 # Tests for totalorder compat symbols reuse the table of tests as
 # processed by gen-libm-test.py, so add dependencies on the generated
 # .c files.
@@ -505,6 +564,18 @@ $(foreach t,$(libm-tests-normal),$(objpfx)$(t).c): $(objpfx)test-%.c:
 	  echo "#include <libm-test-$$func.c>"; \
 	) > $@
 
+$(foreach t,$(libm-tests-normal-static),$(objpfx)$(t).c): $(objpfx)test-%.c:
+	type_func=$*; \
+	type=$${type_func%%-*}; \
+	func=$${type_func#*-}; \
+	( \
+	  echo "#include <test-$$type.h>"; \
+	  echo "#include <test-math-exceptions.h>"; \
+	  echo "#include <test-math-errno.h>"; \
+	  echo "#include <test-math-scalar.h>"; \
+	  echo "#include <libm-test-$$func.c>"; \
+	) > $@
+
 $(foreach t,$(libm-tests-narrow),$(objpfx)$(t).c): $(objpfx)test-%.c:
 	type_pair_func=$*; \
 	type_pair=$${type_pair_func%-*}; \
@@ -539,6 +610,13 @@ $(foreach t,$(test-types),\
 	  echo "#include <libm-test-support.c>"; \
 	) > $@
 
+$(foreach t,$(test-types),\
+	    $(objpfx)libm-test-support-$(t)-static.c): $(objpfx)libm-test-support-%.c:
+	( \
+	  echo "#include <test-$*.h>"; \
+	  echo "#include <libm-test-support.c>"; \
+	) > $@
+
 $(addprefix $(objpfx), $(libm-tests.o)): $(objpfx)libm-test-ulps.h
 
 define o-iterator-doit
@@ -548,6 +626,13 @@ endef
 object-suffixes-left := $(libm-tests-base)
 include $(o-iterator)
 
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all-static),\
+	    $(objpfx)$(o)-$(f)-static.o): $(objpfx)$(o)%.o: $(objpfx)libm-test%.c
+endef
+object-suffixes-left := $(libm-tests-base)
+include $(o-iterator)
+
 define o-iterator-doit
 $(foreach f,$(libm-test-funcs-narrow),\
 	    $(objpfx)$(o)-$(f).o): $(objpfx)$(o)%.o: \
@@ -563,6 +648,13 @@ endef
 object-suffixes-left := $(libm-tests-base-normal)
 include $(o-iterator)
 
+define o-iterator-doit
+$(foreach f,$(libm-test-funcs-all-static),\
+	    $(objpfx)$(o)-$(f)-static.o): CFLAGS += $(libm-test-no-inline-cflags)
+endef
+object-suffixes-left := $(libm-tests-base-normal)
+include $(o-iterator)
+
 define o-iterator-doit
 $(foreach f,$(libm-test-funcs-narrow),\
 	    $(objpfx)$(o)-$(f).o): CFLAGS += $(libm-test-no-inline-cflags)
@@ -584,6 +676,13 @@ endef
 object-suffixes-left := $(test-types)
 include $(o-iterator)
 
+define o-iterator-doit
+$(addprefix $(objpfx),\
+	    $(call libm-tests-for-type-static,$(o))): $(objpfx)libm-test-support-$(o)-static.o
+endef
+object-suffixes-left := $(test-types)
+include $(o-iterator)
+
 define o-iterator-doit
 $(objpfx)libm-test-support-$(o).o: CFLAGS += $(libm-test-no-inline-cflags)
 endef
diff --git a/math/test-double-static.h b/math/test-double-static.h
new file mode 100644
index 0000000000..d53f46819f
--- /dev/null
+++ b/math/test-double-static.h
@@ -0,0 +1 @@
+#include "test-double.h"
diff --git a/math/test-float-static.h b/math/test-float-static.h
new file mode 100644
index 0000000000..7834c9e1f1
--- /dev/null
+++ b/math/test-float-static.h
@@ -0,0 +1 @@
+#include "test-float.h"
diff --git a/math/test-float128-static.h b/math/test-float128-static.h
new file mode 100644
index 0000000000..5f8206456a
--- /dev/null
+++ b/math/test-float128-static.h
@@ -0,0 +1 @@
+#include "test-float128.h"
diff --git a/math/test-float32-static.h b/math/test-float32-static.h
new file mode 100644
index 0000000000..2df27d1ca0
--- /dev/null
+++ b/math/test-float32-static.h
@@ -0,0 +1 @@
+#include "test-float32.h"
diff --git a/math/test-float32x-static.h b/math/test-float32x-static.h
new file mode 100644
index 0000000000..62f78b49d8
--- /dev/null
+++ b/math/test-float32x-static.h
@@ -0,0 +1 @@
+#include "test-float32x.h"
diff --git a/math/test-float64-static.h b/math/test-float64-static.h
new file mode 100644
index 0000000000..807c174df1
--- /dev/null
+++ b/math/test-float64-static.h
@@ -0,0 +1 @@
+#include "test-float64.h"
diff --git a/math/test-float64x-static.h b/math/test-float64x-static.h
new file mode 100644
index 0000000000..a7801dbc10
--- /dev/null
+++ b/math/test-float64x-static.h
@@ -0,0 +1 @@
+#include "test-float64x.h"
diff --git a/math/test-ibm128-static.h b/math/test-ibm128-static.h
new file mode 100644
index 0000000000..b66a57050b
--- /dev/null
+++ b/math/test-ibm128-static.h
@@ -0,0 +1 @@
+#include "test-ibm128.h"
diff --git a/math/test-ldouble-static.h b/math/test-ldouble-static.h
new file mode 100644
index 0000000000..beabedb817
--- /dev/null
+++ b/math/test-ldouble-static.h
@@ -0,0 +1 @@
+#include "test-ldouble.h"
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 02/10] math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488)
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 01/10] math: Add support for auto static math tests Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 03/10] i386: Use generic fmod Adhemerval Zanella
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

The commit 16439f419b removed the static fmod/fmodf on i386 and m68k
with and empty w_fmod.c (required for the ABIs that uses the newly
implementation).  This patch fixes by adding the required symbols on
the arch-specific w_fmod{f}_compat.c implementation.

To statically build fmod fails on some ABI (alpha, s390, sparc) because
it does not export the ldexpf128, this is also fixed by this patch.

Checked on i686-linux-gnu and with a build for m68k-linux-gnu.
---
 math/Makefile                            | 4 +++-
 sysdeps/i386/fpu/w_fmod_compat.c         | 7 ++++---
 sysdeps/i386/fpu/w_fmodf_compat.c        | 7 ++++---
 sysdeps/ieee754/ldbl-opt/s_ldexpl.c      | 4 ++--
 sysdeps/m68k/m680x0/fpu/w_fmod_compat.c  | 5 +++--
 sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c | 7 ++++---
 6 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/math/Makefile b/math/Makefile
index fb537955fb..964bf2be71 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -368,7 +368,9 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 
 
 libm-test-funcs-auto-static =
-libm-test-funcs-noauto-static =
+libm-test-funcs-noauto-static = \
+  fmod \
+  # libm-test-funcs-noauto-static
 libm-test-funcs-narrow-static =
 libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static)
 
diff --git a/sysdeps/i386/fpu/w_fmod_compat.c b/sysdeps/i386/fpu/w_fmod_compat.c
index 5ac9995ffd..528bfc2a13 100644
--- a/sysdeps/i386/fpu/w_fmod_compat.c
+++ b/sysdeps/i386/fpu/w_fmod_compat.c
@@ -7,8 +7,9 @@
 # define LIBM_SVID_COMPAT 1
 # undef compat_symbol
 # define compat_symbol(a, b, c, d)
-#endif
-#include <math/w_fmod_compat.c>
-#ifdef SHARED
+# include <math/w_fmod_compat.c>
 libm_alias_double (__fmod_compat, fmod)
+#else
+#include <math-type-macros-double.h>
+#include <w_fmod_template.c>
 #endif
diff --git a/sysdeps/i386/fpu/w_fmodf_compat.c b/sysdeps/i386/fpu/w_fmodf_compat.c
index cc417e07d3..5a61693e51 100644
--- a/sysdeps/i386/fpu/w_fmodf_compat.c
+++ b/sysdeps/i386/fpu/w_fmodf_compat.c
@@ -7,8 +7,9 @@
 # define LIBM_SVID_COMPAT 1
 # undef compat_symbol
 # define compat_symbol(a, b, c, d)
-#endif
-#include <math/w_fmodf_compat.c>
-#ifdef SHARED
+# 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/ldbl-opt/s_ldexpl.c b/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
index 1afbe7d8ad..932cc4341c 100644
--- a/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
+++ b/sysdeps/ieee754/ldbl-opt/s_ldexpl.c
@@ -17,13 +17,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 # define declare_mgen_alias(f,t)
 #endif
 #include <math-type-macros-ldouble.h>
 #include <s_ldexp_template.c>
 
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 long_double_symbol (libc, __ldexpl, ldexpl);
 long_double_symbol (libc, __wrap_scalbnl, scalbnl);
 #endif
diff --git a/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c b/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c
index 527d4fbed2..57f38091e6 100644
--- a/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c
+++ b/sysdeps/m68k/m680x0/fpu/w_fmod_compat.c
@@ -7,8 +7,9 @@
 # define LIBM_SVID_COMPAT 1
 # undef compat_symbol
 # define compat_symbol(a, b, c, d)
-#endif
 #include <math/w_fmod_compat.c>
-#ifdef SHARED
 libm_alias_double (__fmod_compat, fmod)
+#else
+#include <math-type-macros-double.h>
+#include <w_fmod_template.c>
 #endif
diff --git a/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c b/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c
index 5043586b91..88db07f443 100644
--- a/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c
+++ b/sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c
@@ -7,8 +7,9 @@
 # define LIBM_SVID_COMPAT 1
 # undef compat_symbol
 # define compat_symbol(a, b, c, d)
-#endif
-#include <math/w_fmodf_compat.c>
-#ifdef SHARED
+# 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
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 03/10] i386: Use generic fmod
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 01/10] math: Add support for auto static math tests Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 02/10] math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488) Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:55   ` H.J. Lu
  2024-03-27 19:40 ` [PATCH v2 04/10] i386: Use generic fmodf Adhemerval Zanella
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

The benchtest results shows a slight improvement (Ryzen 5900, gcc
13.2.1):

* sysdeps/i386/fpu/e_fmod.S:
  "fmod": {
   "subnormals": {
    "duration": 3.68855e+09,
    "iterations": 2.12608e+08,
    "max": 62.012,
    "min": 16.798,
    "mean": 17.349
   },
   "normal": {
    "duration": 3.88459e+09,
    "iterations": 7.168e+06,
    "max": 2879.12,
    "min": 16.909,
    "mean": 541.934
   },
   "close-exponents": {
    "duration": 3.692e+09,
    "iterations": 1.96608e+08,
    "max": 66.452,
    "min": 16.835,
    "mean": 18.7785
   }
  }

* generic
  "fmod": {
   "subnormals": {
    "duration": 3.68645e+09,
    "iterations": 2.2848e+08,
    "max": 66.896,
    "min": 15.91,
    "mean": 16.1347
   },
   "normal": {
    "duration": 4.1455e+09,
    "iterations": 8.192e+06,
    "max": 3376.18,
    "min": 15.873,
    "mean": 506.043
   },
   "close-exponents": {
    "duration": 3.70197e+09,
    "iterations": 2.08896e+08,
    "max": 69.597,
    "min": 15.947,
    "mean": 17.7216
   }
  }
---
 sysdeps/i386/fpu/Versions                 |  4 ++++
 sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
 sysdeps/i386/fpu/e_fmod.c                 |  2 ++
 sysdeps/i386/fpu/math_err.c               |  1 -
 sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
 sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
 sysdeps/mach/hurd/i386/libm.abilist       |  1 +
 sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
 8 files changed, 12 insertions(+), 35 deletions(-)
 delete mode 100644 sysdeps/i386/fpu/e_fmod.S
 create mode 100644 sysdeps/i386/fpu/e_fmod.c
 delete mode 100644 sysdeps/i386/fpu/math_err.c
 delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c

diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
index a2eec371f1..d37bc1eae6 100644
--- a/sysdeps/i386/fpu/Versions
+++ b/sysdeps/i386/fpu/Versions
@@ -3,4 +3,8 @@ libm {
     # functions used in inline functions or macros
     __expl; __expm1l;
   }
+  GLIBC_2.40 {
+    # No SVID compatible error handling.
+    fmod;
+  }
 }
diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S
deleted file mode 100644
index 86ac1bcfaf..0000000000
--- a/sysdeps/i386/fpu/e_fmod.S
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Public domain.
- */
-
-#include <machine/asm.h>
-#include <libm-alias-finite.h>
-
-ENTRY(__ieee754_fmod)
-	fldl	12(%esp)
-	fldl	4(%esp)
-1:	fprem
-	fstsw	%ax
-	sahf
-	jp	1b
-	fstp	%st(1)
-	ret
-END (__ieee754_fmod)
-libm_alias_finite (__ieee754_fmod, __fmod)
diff --git a/sysdeps/i386/fpu/e_fmod.c b/sysdeps/i386/fpu/e_fmod.c
new file mode 100644
index 0000000000..3625758f97
--- /dev/null
+++ b/sysdeps/i386/fpu/e_fmod.c
@@ -0,0 +1,2 @@
+#define FMOD_VERSION GLIBC_2_40
+#include <sysdeps/ieee754/dbl-64/e_fmod.c>
diff --git a/sysdeps/i386/fpu/math_err.c b/sysdeps/i386/fpu/math_err.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/math_err.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed.  */
diff --git a/sysdeps/i386/fpu/w_fmod_compat.c b/sysdeps/i386/fpu/w_fmod_compat.c
deleted file mode 100644
index 528bfc2a13..0000000000
--- a/sysdeps/i386/fpu/w_fmod_compat.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* i386 provides an optimized __ieee752_fmod.  */
-#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_fmod_compat.c>
-libm_alias_double (__fmod_compat, fmod)
-#else
-#include <math-type-macros-double.h>
-#include <w_fmod_template.c>
-#endif
diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
index b33cfb1223..7651cd212a 100644
--- a/sysdeps/ieee754/dbl-64/e_fmod.c
+++ b/sysdeps/ieee754/dbl-64/e_fmod.c
@@ -175,7 +175,10 @@ __fmod (double x, double y)
 strong_alias (__fmod, __ieee754_fmod)
 libm_alias_finite (__ieee754_fmod, __fmod)
 #if LIBM_SVID_COMPAT
-versioned_symbol (libm, __fmod, fmod, GLIBC_2_38);
+# ifndef FMOD_VERSION
+#  define FMOD_VERSION GLIBC_2_38
+# endif
+versioned_symbol (libm, __fmod, fmod, FMOD_VERSION);
 libm_alias_double_other (__fmod, fmod)
 #else
 libm_alias_double (__fmod, fmod)
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index 8f40ddb150..30665f8b1a 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1181,3 +1181,4 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.40 fmod F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index 5d89aaa08e..44932f111d 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1188,3 +1188,4 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.40 fmod F
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 04/10] i386: Use generic fmodf
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (2 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 03/10] i386: Use generic fmod Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:55   ` H.J. Lu
  2024-03-27 19:40 ` [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build Adhemerval Zanella
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

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


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (3 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 04/10] i386: Use generic fmodf Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:57   ` H.J. Lu
  2024-03-27 19:40 ` [PATCH v2 06/10] i386: Use generic exp10 Adhemerval Zanella
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

The commit 08ddd26814 removed the static exp10 on i386 and m68k with an
empty w_exp10.c (required for the ABIs that uses the newly
implementation).  This patch fixes by adding the required symbols on the
arch-specific w_exp{f}_compat.c implementation.

Checked on i686-linux-gnu and with a build for m68k-linux-gnu.
---
 math/Makefile                            | 4 +++-
 sysdeps/i386/fpu/w_exp10_compat.c        | 9 +++++++--
 sysdeps/m68k/m680x0/fpu/w_exp10_compat.c | 9 +++++++--
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/math/Makefile b/math/Makefile
index 964bf2be71..f1d210797d 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -367,7 +367,9 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 	$(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out$* -C $@
 
 
-libm-test-funcs-auto-static =
+libm-test-funcs-auto-static = \
+  exp10 \
+  # libm-test-funcs-auto-static
 libm-test-funcs-noauto-static = \
   fmod \
   # libm-test-funcs-noauto-static
diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
index b53455386e..49a0e03385 100644
--- a/sysdeps/i386/fpu/w_exp10_compat.c
+++ b/sysdeps/i386/fpu/w_exp10_compat.c
@@ -1,3 +1,8 @@
 /* i386 provides an optimized __ieee754_exp10.  */
-#define NO_COMPAT_NEEDED 1
-#include <math/w_exp10_compat.c>
+#ifdef SHARED
+# define NO_COMPAT_NEEDED 1
+# include <math/w_exp10_compat.c>
+#else
+# include <math-type-macros-double.h>
+# include <w_exp10_template.c>
+#endif
diff --git a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
index 0d3e718626..350f2e4b4d 100644
--- a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
+++ b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
@@ -1,3 +1,8 @@
 /* m68k provides an optimized __ieee754_exp10.  */
-#define NO_COMPAT_NEEDED 1
-#include <math/w_exp10_compat.c>
+#ifdef SHARED
+# define NO_COMPAT_NEEDED 1
+# include <math/w_exp10_compat.c>
+#else
+# include <math-type-macros-double.h>
+# include <w_exp10_template.c>
+#endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 06/10] i386: Use generic exp10
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (4 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 20:14   ` H.J. Lu
  2024-03-27 19:40 ` [PATCH v2 07/10] math: Fix isnanf128 static build Adhemerval Zanella
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

The resulting performance is slight better (Ryzen 5900, gcc 13.2.1):

 * master
  "exp10": {
   "": {
    "duration": 3.70091e+09,
    "iterations": 5.8534e+07,
    "max": 91.279,
    "min": 62.6225,
    "mean": 63.2267
   }
  }

 * patch
  "exp10": {
   "": {
    "duration": 3.70793e+09,
    "iterations": 6.328e+07,
    "max": 259.592,
    "min": 52.1145,
    "mean": 58.5957
   }
  }

Checked on i686-linux-gnu.
---
 sysdeps/i386/fpu/Versions                 |  1 +
 sysdeps/i386/fpu/e_exp10.S                | 51 -----------------------
 sysdeps/i386/fpu/e_exp10.c                |  2 +
 sysdeps/i386/fpu/e_exp_data.c             |  1 -
 sysdeps/i386/fpu/w_exp10_compat.c         |  8 ----
 sysdeps/ieee754/dbl-64/e_exp10.c          |  7 +++-
 sysdeps/mach/hurd/i386/libm.abilist       |  1 +
 sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
 8 files changed, 10 insertions(+), 62 deletions(-)
 delete mode 100644 sysdeps/i386/fpu/e_exp10.S
 create mode 100644 sysdeps/i386/fpu/e_exp10.c
 delete mode 100644 sysdeps/i386/fpu/e_exp_data.c
 delete mode 100644 sysdeps/i386/fpu/w_exp10_compat.c

diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
index 9509f9b7c7..7326f25583 100644
--- a/sysdeps/i386/fpu/Versions
+++ b/sysdeps/i386/fpu/Versions
@@ -5,6 +5,7 @@ libm {
   }
   GLIBC_2.40 {
     # No SVID compatible error handling.
+    exp10;
     fmod; fmodf;
   }
 }
diff --git a/sysdeps/i386/fpu/e_exp10.S b/sysdeps/i386/fpu/e_exp10.S
deleted file mode 100644
index 902f70b77f..0000000000
--- a/sysdeps/i386/fpu/e_exp10.S
+++ /dev/null
@@ -1,51 +0,0 @@
-
-#include <machine/asm.h>
-#include <i386-math-asm.h>
-#include <libm-alias-finite.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%ecx)
-#else
-# define MO(op) op
-#endif
-
-	.text
-/* 10^x = 2^(x * log2(10)) */
-ENTRY(__ieee754_exp10)
-#ifdef  PIC
-	LOAD_PIC_REG (cx)
-#endif
-	fldl	4(%esp)
-/* I added the following ugly construct because exp(+-Inf) resulted
-   in NaN.  The ugliness results from the bright minds at Intel.
-   For the i686 the code can be written better.
-   -- drepper@cygnus.com.  */
-	fxam				/* Is NaN or +-Inf?  */
-	fstsw	%ax
-	movb	$0x45, %dh
-	andb	%ah, %dh
-	cmpb	$0x05, %dh
-	je	1f			/* Is +-Inf, jump.  */
-	fldl2t
-	fmulp				/* x * log2(10) */
-	fld	%st
-	frndint				/* int(x * log2(10)) */
-	fsubr	%st,%st(1)		/* fract(x * log2(10)) */
-	fxch
-	f2xm1				/* 2^(fract(x * log2(10))) - 1 */
-	fld1
-	faddp				/* 2^(fract(x * log2(10))) */
-	fscale				/* e^x */
-	fstp	%st(1)
-	DBL_NARROW_EVAL_UFLOW_NONNEG_NAN
-	ret
-
-1:	testl	$0x200, %eax		/* Test sign.  */
-	jz	2f			/* If positive, jump.  */
-	fstp	%st
-	fldz				/* Set result to 0.  */
-2:	ret
-END (__ieee754_exp10)
-libm_alias_finite (__ieee754_exp10, __exp10)
diff --git a/sysdeps/i386/fpu/e_exp10.c b/sysdeps/i386/fpu/e_exp10.c
new file mode 100644
index 0000000000..340254fc6e
--- /dev/null
+++ b/sysdeps/i386/fpu/e_exp10.c
@@ -0,0 +1,2 @@
+#define EXP10_VERSION GLIBC_2_40
+#include <sysdeps/ieee754/dbl-64/e_exp10.c>
diff --git a/sysdeps/i386/fpu/e_exp_data.c b/sysdeps/i386/fpu/e_exp_data.c
deleted file mode 100644
index 1cc8931700..0000000000
--- a/sysdeps/i386/fpu/e_exp_data.c
+++ /dev/null
@@ -1 +0,0 @@
-/* Not needed.  */
diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
deleted file mode 100644
index 49a0e03385..0000000000
--- a/sysdeps/i386/fpu/w_exp10_compat.c
+++ /dev/null
@@ -1,8 +0,0 @@
-/* i386 provides an optimized __ieee754_exp10.  */
-#ifdef SHARED
-# define NO_COMPAT_NEEDED 1
-# include <math/w_exp10_compat.c>
-#else
-# include <math-type-macros-double.h>
-# include <w_exp10_template.c>
-#endif
diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
index 225fc74c4c..c63b852f72 100644
--- a/sysdeps/ieee754/dbl-64/e_exp10.c
+++ b/sysdeps/ieee754/dbl-64/e_exp10.c
@@ -99,7 +99,7 @@ __exp10 (double x)
 
   /* Reduce x: z = x * N / log10(2), k = round(z).  */
   double_t z = __exp_data.invlog10_2N * x;
-  double_t kd;
+  double kd;
   int64_t ki;
 #if TOINT_INTRINSICS
   kd = roundtoint (z);
@@ -147,7 +147,10 @@ __exp10 (double x)
 strong_alias (__exp10, __ieee754_exp10)
 libm_alias_finite (__ieee754_exp10, __exp10)
 #if LIBM_SVID_COMPAT
-versioned_symbol (libm, __exp10, exp10, GLIBC_2_39);
+# ifndef EXP10_VERSION
+#  define EXP10_VERSION GLIBC_2_39
+# endif
+versioned_symbol (libm, __exp10, exp10, EXP10_VERSION);
 libm_alias_double_other (__exp10, exp10)
 #else
 libm_alias_double (__exp10, exp10)
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index 88e7538e51..01c5633663 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1181,5 +1181,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.40 exp10 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 c99c60161d..3413cfdbe7 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1188,5 +1188,6 @@ GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
 GLIBC_2.35 hypot F
 GLIBC_2.35 hypotf F
+GLIBC_2.40 exp10 F
 GLIBC_2.40 fmod F
 GLIBC_2.40 fmodf F
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 07/10] math: Fix isnanf128 static build
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (5 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 06/10] i386: Use generic exp10 Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 08/10] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9 Adhemerval Zanella
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

Some static implementation of float128 routines might call __isnanf128,
which is not provided by the static object.

Checked on x86_64-linux-gnu.
---
 math/Makefile                               | 1 +
 sysdeps/ieee754/float128/float128_private.h | 2 +-
 sysdeps/ieee754/float128/s_isnanf128.c      | 4 ++++
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/math/Makefile b/math/Makefile
index f1d210797d..516fa72a26 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -372,6 +372,7 @@ libm-test-funcs-auto-static = \
   # libm-test-funcs-auto-static
 libm-test-funcs-noauto-static = \
   fmod \
+  isnan \
   # libm-test-funcs-noauto-static
 libm-test-funcs-narrow-static =
 libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static)
diff --git a/sysdeps/ieee754/float128/float128_private.h b/sysdeps/ieee754/float128/float128_private.h
index 38a8bdd0fe..672bf3cccf 100644
--- a/sysdeps/ieee754/float128/float128_private.h
+++ b/sysdeps/ieee754/float128/float128_private.h
@@ -352,7 +352,7 @@
 #define frexpl frexpf128
 #define getpayloadl getpayloadf128
 #define isinfl isinff128_do_not_use
-#define isnanl isnanf128_do_not_use
+#define isnanl isnanf128
 #define ldexpl ldexpf128
 #define llrintl llrintf128
 #define llroundl llroundf128
diff --git a/sysdeps/ieee754/float128/s_isnanf128.c b/sysdeps/ieee754/float128/s_isnanf128.c
index 59f71533ce..b73a4e80d7 100644
--- a/sysdeps/ieee754/float128/s_isnanf128.c
+++ b/sysdeps/ieee754/float128/s_isnanf128.c
@@ -11,7 +11,11 @@
 #include "../ldbl-128/s_isnanl.c"
 #if !IS_IN (libm)
 #include <float128-abi.h>
+#ifdef SHARED
 hidden_ver (__isnanf128_impl, __isnanf128)
+#else
+strong_alias (__isnanf128_impl, __isnanf128)
+#endif
 _weak_alias (__isnanf128_impl, isnanl)
 versioned_symbol (libc, __isnanf128_impl, __isnanf128, GLIBC_2_34);
 #if (SHLIB_COMPAT (libc, FLOAT128_VERSION_M, GLIBC_2_34))
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 08/10] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (6 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 07/10] math: Fix isnanf128 static build Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 09/10] math: Provide frexpf128 " Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 10/10] math: Provide modf128 " Adhemerval Zanella
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

Checked with a static build for the affected ABIs.
---
 math/Makefile                             | 1 +
 sysdeps/ieee754/ldbl-64-128/s_copysignl.c | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/math/Makefile b/math/Makefile
index 516fa72a26..61736159d1 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -371,6 +371,7 @@ libm-test-funcs-auto-static = \
   exp10 \
   # libm-test-funcs-auto-static
 libm-test-funcs-noauto-static = \
+  copysign \
   fmod \
   isnan \
   # libm-test-funcs-noauto-static
diff --git a/sysdeps/ieee754/ldbl-64-128/s_copysignl.c b/sysdeps/ieee754/ldbl-64-128/s_copysignl.c
index 11b42d04ba..80137847d3 100644
--- a/sysdeps/ieee754/ldbl-64-128/s_copysignl.c
+++ b/sysdeps/ieee754/ldbl-64-128/s_copysignl.c
@@ -1,10 +1,10 @@
 #include <math_ldbl_opt.h>
 #include <libm-alias-ldouble.h>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 # undef libm_alias_ldouble
 # define libm_alias_ldouble(from, to)
 #endif
 #include <sysdeps/ieee754/ldbl-128/s_copysignl.c>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 long_double_symbol (libc, __copysignl, copysignl);
 #endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 09/10] math: Provide frexpf128 for static libm on alpha, s390, and sparcv9
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (7 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 08/10] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9 Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  2024-03-27 19:40 ` [PATCH v2 10/10] math: Provide modf128 " Adhemerval Zanella
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

hecked with a build for the affected ABIs.
---
 math/Makefile                          | 1 +
 sysdeps/ieee754/ldbl-64-128/s_frexpl.c | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/math/Makefile b/math/Makefile
index 61736159d1..655f6ed4e3 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -373,6 +373,7 @@ libm-test-funcs-auto-static = \
 libm-test-funcs-noauto-static = \
   copysign \
   fmod \
+  frexp \
   isnan \
   # libm-test-funcs-noauto-static
 libm-test-funcs-narrow-static =
diff --git a/sysdeps/ieee754/ldbl-64-128/s_frexpl.c b/sysdeps/ieee754/ldbl-64-128/s_frexpl.c
index 73ac41e40c..f5f7d349f7 100644
--- a/sysdeps/ieee754/ldbl-64-128/s_frexpl.c
+++ b/sysdeps/ieee754/ldbl-64-128/s_frexpl.c
@@ -1,10 +1,10 @@
 #include <math_ldbl_opt.h>
 #include <libm-alias-ldouble.h>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 # undef libm_alias_ldouble
 # define libm_alias_ldouble(from, to)
 #endif
 #include <sysdeps/ieee754/ldbl-128/s_frexpl.c>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 long_double_symbol (libc, __frexpl, frexpl);
 #endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v2 10/10] math: Provide modf128 for static libm on alpha, s390, and sparcv9
  2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
                   ` (8 preceding siblings ...)
  2024-03-27 19:40 ` [PATCH v2 09/10] math: Provide frexpf128 " Adhemerval Zanella
@ 2024-03-27 19:40 ` Adhemerval Zanella
  9 siblings, 0 replies; 27+ messages in thread
From: Adhemerval Zanella @ 2024-03-27 19:40 UTC (permalink / raw)
  To: libc-alpha; +Cc: Joseph Myers, Florian Weimer, H . J . Lu

Checked with a build for the affected ABIs
---
 math/Makefile                         | 1 +
 sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/math/Makefile b/math/Makefile
index 655f6ed4e3..af1909d0c7 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -375,6 +375,7 @@ libm-test-funcs-noauto-static = \
   fmod \
   frexp \
   isnan \
+  modf \
   # libm-test-funcs-noauto-static
 libm-test-funcs-narrow-static =
 libm-test-funcs-all-static = $(libm-test-funcs-auto-static) $(libm-test-funcs-noauto-static)
diff --git a/sysdeps/ieee754/ldbl-64-128/s_modfl.c b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
index 7d7aeae111..ba3d31334a 100644
--- a/sysdeps/ieee754/ldbl-64-128/s_modfl.c
+++ b/sysdeps/ieee754/ldbl-64-128/s_modfl.c
@@ -1,10 +1,10 @@
 #include <math_ldbl_opt.h>
 #include <libm-alias-ldouble.h>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 # undef libm_alias_ldouble
 # define libm_alias_ldouble(from, to)
 #endif
 #include <sysdeps/ieee754/ldbl-128/s_modfl.c>
-#if IS_IN (libc)
+#if IS_IN (libc) && defined SHARED
 long_double_symbol (libc, __modfl, modfl);
 #endif
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-27 19:40 ` [PATCH v2 03/10] i386: Use generic fmod Adhemerval Zanella
@ 2024-03-27 19:55   ` H.J. Lu
  2024-03-27 20:37     ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: H.J. Lu @ 2024-03-27 19:55 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha, Joseph Myers, Florian Weimer

On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The benchtest results shows a slight improvement (Ryzen 5900, gcc
> 13.2.1):
>
> * sysdeps/i386/fpu/e_fmod.S:
>   "fmod": {
>    "subnormals": {
>     "duration": 3.68855e+09,
>     "iterations": 2.12608e+08,
>     "max": 62.012,
>     "min": 16.798,
>     "mean": 17.349
>    },
>    "normal": {
>     "duration": 3.88459e+09,
>     "iterations": 7.168e+06,
>     "max": 2879.12,
>     "min": 16.909,
>     "mean": 541.934
>    },
>    "close-exponents": {
>     "duration": 3.692e+09,
>     "iterations": 1.96608e+08,
>     "max": 66.452,
>     "min": 16.835,
>     "mean": 18.7785
>    }
>   }
>
> * generic
>   "fmod": {
>    "subnormals": {
>     "duration": 3.68645e+09,
>     "iterations": 2.2848e+08,
>     "max": 66.896,
>     "min": 15.91,
>     "mean": 16.1347
>    },
>    "normal": {
>     "duration": 4.1455e+09,
>     "iterations": 8.192e+06,
>     "max": 3376.18,
>     "min": 15.873,
>     "mean": 506.043
>    },
>    "close-exponents": {
>     "duration": 3.70197e+09,
>     "iterations": 2.08896e+08,
>     "max": 69.597,
>     "min": 15.947,
>     "mean": 17.7216
>    }
>   }
> ---
>  sysdeps/i386/fpu/Versions                 |  4 ++++
>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
>  sysdeps/i386/fpu/math_err.c               |  1 -
>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>  8 files changed, 12 insertions(+), 35 deletions(-)
>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
>  delete mode 100644 sysdeps/i386/fpu/math_err.c
>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
>
> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
> index a2eec371f1..d37bc1eae6 100644
> --- a/sysdeps/i386/fpu/Versions
> +++ b/sysdeps/i386/fpu/Versions
> @@ -3,4 +3,8 @@ libm {
>      # functions used in inline functions or macros
>      __expl; __expm1l;
>    }
> +  GLIBC_2.40 {
> +    # No SVID compatible error handling.
> +    fmod;
> +  }

This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
report open for this?

>  }
> diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S
> deleted file mode 100644
> index 86ac1bcfaf..0000000000
> --- a/sysdeps/i386/fpu/e_fmod.S
> +++ /dev/null
> @@ -1,18 +0,0 @@
> -/*
> - * Public domain.
> - */
> -
> -#include <machine/asm.h>
> -#include <libm-alias-finite.h>
> -
> -ENTRY(__ieee754_fmod)
> -       fldl    12(%esp)
> -       fldl    4(%esp)
> -1:     fprem
> -       fstsw   %ax
> -       sahf
> -       jp      1b
> -       fstp    %st(1)
> -       ret
> -END (__ieee754_fmod)
> -libm_alias_finite (__ieee754_fmod, __fmod)
> diff --git a/sysdeps/i386/fpu/e_fmod.c b/sysdeps/i386/fpu/e_fmod.c
> new file mode 100644
> index 0000000000..3625758f97
> --- /dev/null
> +++ b/sysdeps/i386/fpu/e_fmod.c
> @@ -0,0 +1,2 @@
> +#define FMOD_VERSION GLIBC_2_40
> +#include <sysdeps/ieee754/dbl-64/e_fmod.c>
> diff --git a/sysdeps/i386/fpu/math_err.c b/sysdeps/i386/fpu/math_err.c
> deleted file mode 100644
> index 1cc8931700..0000000000
> --- a/sysdeps/i386/fpu/math_err.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -/* Not needed.  */
> diff --git a/sysdeps/i386/fpu/w_fmod_compat.c b/sysdeps/i386/fpu/w_fmod_compat.c
> deleted file mode 100644
> index 528bfc2a13..0000000000
> --- a/sysdeps/i386/fpu/w_fmod_compat.c
> +++ /dev/null
> @@ -1,15 +0,0 @@
> -/* i386 provides an optimized __ieee752_fmod.  */
> -#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_fmod_compat.c>
> -libm_alias_double (__fmod_compat, fmod)
> -#else
> -#include <math-type-macros-double.h>
> -#include <w_fmod_template.c>
> -#endif
> diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
> index b33cfb1223..7651cd212a 100644
> --- a/sysdeps/ieee754/dbl-64/e_fmod.c
> +++ b/sysdeps/ieee754/dbl-64/e_fmod.c
> @@ -175,7 +175,10 @@ __fmod (double x, double y)
>  strong_alias (__fmod, __ieee754_fmod)
>  libm_alias_finite (__ieee754_fmod, __fmod)
>  #if LIBM_SVID_COMPAT
> -versioned_symbol (libm, __fmod, fmod, GLIBC_2_38);
> +# ifndef FMOD_VERSION
> +#  define FMOD_VERSION GLIBC_2_38
> +# endif
> +versioned_symbol (libm, __fmod, fmod, FMOD_VERSION);
>  libm_alias_double_other (__fmod, fmod)
>  #else
>  libm_alias_double (__fmod, fmod)
> diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
> index 8f40ddb150..30665f8b1a 100644
> --- a/sysdeps/mach/hurd/i386/libm.abilist
> +++ b/sysdeps/mach/hurd/i386/libm.abilist
> @@ -1181,3 +1181,4 @@ GLIBC_2.35 fsqrt F
>  GLIBC_2.35 fsqrtl F
>  GLIBC_2.35 hypot F
>  GLIBC_2.35 hypotf F
> +GLIBC_2.40 fmod F
> diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
> index 5d89aaa08e..44932f111d 100644
> --- a/sysdeps/unix/sysv/linux/i386/libm.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
> @@ -1188,3 +1188,4 @@ GLIBC_2.35 fsqrt F
>  GLIBC_2.35 fsqrtl F
>  GLIBC_2.35 hypot F
>  GLIBC_2.35 hypotf F
> +GLIBC_2.40 fmod F
> --
> 2.34.1
>


-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 04/10] i386: Use generic fmodf
  2024-03-27 19:40 ` [PATCH v2 04/10] i386: Use generic fmodf Adhemerval Zanella
@ 2024-03-27 19:55   ` H.J. Lu
  0 siblings, 0 replies; 27+ messages in thread
From: H.J. Lu @ 2024-03-27 19:55 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha, Joseph Myers, Florian Weimer

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.

-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build
  2024-03-27 19:40 ` [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build Adhemerval Zanella
@ 2024-03-27 19:57   ` H.J. Lu
  2024-03-27 20:39     ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: H.J. Lu @ 2024-03-27 19:57 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha, Joseph Myers, Florian Weimer

On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The commit 08ddd26814 removed the static exp10 on i386 and m68k with an
> empty w_exp10.c (required for the ABIs that uses the newly
> implementation).  This patch fixes by adding the required symbols on the
> arch-specific w_exp{f}_compat.c implementation.
>
> Checked on i686-linux-gnu and with a build for m68k-linux-gnu.
> ---
>  math/Makefile                            | 4 +++-
>  sysdeps/i386/fpu/w_exp10_compat.c        | 9 +++++++--
>  sysdeps/m68k/m680x0/fpu/w_exp10_compat.c | 9 +++++++--
>  3 files changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/math/Makefile b/math/Makefile
> index 964bf2be71..f1d210797d 100644
> --- a/math/Makefile
> +++ b/math/Makefile
> @@ -367,7 +367,9 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
>         $(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out$* -C $@
>
>
> -libm-test-funcs-auto-static =
> +libm-test-funcs-auto-static = \
> +  exp10 \
> +  # libm-test-funcs-auto-static

This doesn't provide confidence that static libm issues are fixed.
I think we should add a configure option to enable static tests for
all libm functions.

>  libm-test-funcs-noauto-static = \
>    fmod \
>    # libm-test-funcs-noauto-static
> diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
> index b53455386e..49a0e03385 100644
> --- a/sysdeps/i386/fpu/w_exp10_compat.c
> +++ b/sysdeps/i386/fpu/w_exp10_compat.c
> @@ -1,3 +1,8 @@
>  /* i386 provides an optimized __ieee754_exp10.  */
> -#define NO_COMPAT_NEEDED 1
> -#include <math/w_exp10_compat.c>
> +#ifdef SHARED
> +# define NO_COMPAT_NEEDED 1
> +# include <math/w_exp10_compat.c>
> +#else
> +# include <math-type-macros-double.h>
> +# include <w_exp10_template.c>
> +#endif
> diff --git a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
> index 0d3e718626..350f2e4b4d 100644
> --- a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
> +++ b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
> @@ -1,3 +1,8 @@
>  /* m68k provides an optimized __ieee754_exp10.  */
> -#define NO_COMPAT_NEEDED 1
> -#include <math/w_exp10_compat.c>
> +#ifdef SHARED
> +# define NO_COMPAT_NEEDED 1
> +# include <math/w_exp10_compat.c>
> +#else
> +# include <math-type-macros-double.h>
> +# include <w_exp10_template.c>
> +#endif
> --
> 2.34.1
>


-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 06/10] i386: Use generic exp10
  2024-03-27 19:40 ` [PATCH v2 06/10] i386: Use generic exp10 Adhemerval Zanella
@ 2024-03-27 20:14   ` H.J. Lu
  0 siblings, 0 replies; 27+ messages in thread
From: H.J. Lu @ 2024-03-27 20:14 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha, Joseph Myers, Florian Weimer

On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The resulting performance is slight better (Ryzen 5900, gcc 13.2.1):
>
>  * master
>   "exp10": {
>    "": {
>     "duration": 3.70091e+09,
>     "iterations": 5.8534e+07,
>     "max": 91.279,
>     "min": 62.6225,
>     "mean": 63.2267
>    }
>   }
>
>  * patch
>   "exp10": {
>    "": {
>     "duration": 3.70793e+09,
>     "iterations": 6.328e+07,
>     "max": 259.592,
>     "min": 52.1145,
>     "mean": 58.5957
>    }
>   }
>
> Checked on i686-linux-gnu.
> ---
>  sysdeps/i386/fpu/Versions                 |  1 +
>  sysdeps/i386/fpu/e_exp10.S                | 51 -----------------------
>  sysdeps/i386/fpu/e_exp10.c                |  2 +
>  sysdeps/i386/fpu/e_exp_data.c             |  1 -
>  sysdeps/i386/fpu/w_exp10_compat.c         |  8 ----
>  sysdeps/ieee754/dbl-64/e_exp10.c          |  7 +++-
>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>  8 files changed, 10 insertions(+), 62 deletions(-)
>  delete mode 100644 sysdeps/i386/fpu/e_exp10.S
>  create mode 100644 sysdeps/i386/fpu/e_exp10.c
>  delete mode 100644 sysdeps/i386/fpu/e_exp_data.c
>  delete mode 100644 sysdeps/i386/fpu/w_exp10_compat.c
>
> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
> index 9509f9b7c7..7326f25583 100644
> --- a/sysdeps/i386/fpu/Versions
> +++ b/sysdeps/i386/fpu/Versions
> @@ -5,6 +5,7 @@ libm {
>    }
>    GLIBC_2.40 {
>      # No SVID compatible error handling.
> +    exp10;
>      fmod; fmodf;
>    }
>  }
> diff --git a/sysdeps/i386/fpu/e_exp10.S b/sysdeps/i386/fpu/e_exp10.S
> deleted file mode 100644
> index 902f70b77f..0000000000
> --- a/sysdeps/i386/fpu/e_exp10.S
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -
> -#include <machine/asm.h>
> -#include <i386-math-asm.h>
> -#include <libm-alias-finite.h>
> -
> -DEFINE_DBL_MIN
> -
> -#ifdef PIC
> -# define MO(op) op##@GOTOFF(%ecx)
> -#else
> -# define MO(op) op
> -#endif
> -
> -       .text
> -/* 10^x = 2^(x * log2(10)) */
> -ENTRY(__ieee754_exp10)
> -#ifdef  PIC
> -       LOAD_PIC_REG (cx)
> -#endif
> -       fldl    4(%esp)
> -/* I added the following ugly construct because exp(+-Inf) resulted
> -   in NaN.  The ugliness results from the bright minds at Intel.
> -   For the i686 the code can be written better.
> -   -- drepper@cygnus.com.  */
> -       fxam                            /* Is NaN or +-Inf?  */
> -       fstsw   %ax
> -       movb    $0x45, %dh
> -       andb    %ah, %dh
> -       cmpb    $0x05, %dh
> -       je      1f                      /* Is +-Inf, jump.  */
> -       fldl2t
> -       fmulp                           /* x * log2(10) */
> -       fld     %st
> -       frndint                         /* int(x * log2(10)) */
> -       fsubr   %st,%st(1)              /* fract(x * log2(10)) */
> -       fxch
> -       f2xm1                           /* 2^(fract(x * log2(10))) - 1 */
> -       fld1
> -       faddp                           /* 2^(fract(x * log2(10))) */
> -       fscale                          /* e^x */
> -       fstp    %st(1)
> -       DBL_NARROW_EVAL_UFLOW_NONNEG_NAN
> -       ret
> -
> -1:     testl   $0x200, %eax            /* Test sign.  */
> -       jz      2f                      /* If positive, jump.  */
> -       fstp    %st
> -       fldz                            /* Set result to 0.  */
> -2:     ret
> -END (__ieee754_exp10)
> -libm_alias_finite (__ieee754_exp10, __exp10)
> diff --git a/sysdeps/i386/fpu/e_exp10.c b/sysdeps/i386/fpu/e_exp10.c
> new file mode 100644
> index 0000000000..340254fc6e
> --- /dev/null
> +++ b/sysdeps/i386/fpu/e_exp10.c
> @@ -0,0 +1,2 @@
> +#define EXP10_VERSION GLIBC_2_40
> +#include <sysdeps/ieee754/dbl-64/e_exp10.c>
> diff --git a/sysdeps/i386/fpu/e_exp_data.c b/sysdeps/i386/fpu/e_exp_data.c
> deleted file mode 100644
> index 1cc8931700..0000000000
> --- a/sysdeps/i386/fpu/e_exp_data.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -/* Not needed.  */
> diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
> deleted file mode 100644
> index 49a0e03385..0000000000
> --- a/sysdeps/i386/fpu/w_exp10_compat.c
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -/* i386 provides an optimized __ieee754_exp10.  */
> -#ifdef SHARED
> -# define NO_COMPAT_NEEDED 1
> -# include <math/w_exp10_compat.c>
> -#else
> -# include <math-type-macros-double.h>
> -# include <w_exp10_template.c>
> -#endif
> diff --git a/sysdeps/ieee754/dbl-64/e_exp10.c b/sysdeps/ieee754/dbl-64/e_exp10.c
> index 225fc74c4c..c63b852f72 100644
> --- a/sysdeps/ieee754/dbl-64/e_exp10.c
> +++ b/sysdeps/ieee754/dbl-64/e_exp10.c
> @@ -99,7 +99,7 @@ __exp10 (double x)
>
>    /* Reduce x: z = x * N / log10(2), k = round(z).  */
>    double_t z = __exp_data.invlog10_2N * x;
> -  double_t kd;
> +  double kd;
>    int64_t ki;
>  #if TOINT_INTRINSICS
>    kd = roundtoint (z);
> @@ -147,7 +147,10 @@ __exp10 (double x)
>  strong_alias (__exp10, __ieee754_exp10)
>  libm_alias_finite (__ieee754_exp10, __exp10)
>  #if LIBM_SVID_COMPAT
> -versioned_symbol (libm, __exp10, exp10, GLIBC_2_39);
> +# ifndef EXP10_VERSION
> +#  define EXP10_VERSION GLIBC_2_39
> +# endif
> +versioned_symbol (libm, __exp10, exp10, EXP10_VERSION);
>  libm_alias_double_other (__exp10, exp10)
>  #else
>  libm_alias_double (__exp10, exp10)
> diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
> index 88e7538e51..01c5633663 100644
> --- a/sysdeps/mach/hurd/i386/libm.abilist
> +++ b/sysdeps/mach/hurd/i386/libm.abilist
> @@ -1181,5 +1181,6 @@ GLIBC_2.35 fsqrt F
>  GLIBC_2.35 fsqrtl F
>  GLIBC_2.35 hypot F
>  GLIBC_2.35 hypotf F
> +GLIBC_2.40 exp10 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 c99c60161d..3413cfdbe7 100644
> --- a/sysdeps/unix/sysv/linux/i386/libm.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
> @@ -1188,5 +1188,6 @@ GLIBC_2.35 fsqrt F
>  GLIBC_2.35 fsqrtl F
>  GLIBC_2.35 hypot F
>  GLIBC_2.35 hypotf F
> +GLIBC_2.40 exp10 F
>  GLIBC_2.40 fmod F
>  GLIBC_2.40 fmodf F
> --
> 2.34.1
>

Also need a bug report.

-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-27 19:55   ` H.J. Lu
@ 2024-03-27 20:37     ` Adhemerval Zanella Netto
  2024-03-27 21:38       ` H.J. Lu
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-27 20:37 UTC (permalink / raw)
  To: H.J. Lu; +Cc: libc-alpha, Joseph Myers, Florian Weimer



On 27/03/24 16:55, H.J. Lu wrote:
> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
>> 13.2.1):
>>
>> * sysdeps/i386/fpu/e_fmod.S:
>>   "fmod": {
>>    "subnormals": {
>>     "duration": 3.68855e+09,
>>     "iterations": 2.12608e+08,
>>     "max": 62.012,
>>     "min": 16.798,
>>     "mean": 17.349
>>    },
>>    "normal": {
>>     "duration": 3.88459e+09,
>>     "iterations": 7.168e+06,
>>     "max": 2879.12,
>>     "min": 16.909,
>>     "mean": 541.934
>>    },
>>    "close-exponents": {
>>     "duration": 3.692e+09,
>>     "iterations": 1.96608e+08,
>>     "max": 66.452,
>>     "min": 16.835,
>>     "mean": 18.7785
>>    }
>>   }
>>
>> * generic
>>   "fmod": {
>>    "subnormals": {
>>     "duration": 3.68645e+09,
>>     "iterations": 2.2848e+08,
>>     "max": 66.896,
>>     "min": 15.91,
>>     "mean": 16.1347
>>    },
>>    "normal": {
>>     "duration": 4.1455e+09,
>>     "iterations": 8.192e+06,
>>     "max": 3376.18,
>>     "min": 15.873,
>>     "mean": 506.043
>>    },
>>    "close-exponents": {
>>     "duration": 3.70197e+09,
>>     "iterations": 2.08896e+08,
>>     "max": 69.597,
>>     "min": 15.947,
>>     "mean": 17.7216
>>    }
>>   }
>> ---
>>  sysdeps/i386/fpu/Versions                 |  4 ++++
>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
>>  sysdeps/i386/fpu/math_err.c               |  1 -
>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>>  8 files changed, 12 insertions(+), 35 deletions(-)
>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
>>
>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
>> index a2eec371f1..d37bc1eae6 100644
>> --- a/sysdeps/i386/fpu/Versions
>> +++ b/sysdeps/i386/fpu/Versions
>> @@ -3,4 +3,8 @@ libm {
>>      # functions used in inline functions or macros
>>      __expl; __expm1l;
>>    }
>> +  GLIBC_2.40 {
>> +    # No SVID compatible error handling.
>> +    fmod;
>> +  }
> 
> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
> report open for this?
> 

The new version is the way to provide the system without the SVID compat
support, which we for all ABIs but i386 on 2.38. For instance:

find . -iname libm.abilist | xargs grep -w fmod
./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
[...]

For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.

>>  }
>> diff --git a/sysdeps/i386/fpu/e_fmod.S b/sysdeps/i386/fpu/e_fmod.S
>> deleted file mode 100644
>> index 86ac1bcfaf..0000000000
>> --- a/sysdeps/i386/fpu/e_fmod.S
>> +++ /dev/null
>> @@ -1,18 +0,0 @@
>> -/*
>> - * Public domain.
>> - */
>> -
>> -#include <machine/asm.h>
>> -#include <libm-alias-finite.h>
>> -
>> -ENTRY(__ieee754_fmod)
>> -       fldl    12(%esp)
>> -       fldl    4(%esp)
>> -1:     fprem
>> -       fstsw   %ax
>> -       sahf
>> -       jp      1b
>> -       fstp    %st(1)
>> -       ret
>> -END (__ieee754_fmod)
>> -libm_alias_finite (__ieee754_fmod, __fmod)
>> diff --git a/sysdeps/i386/fpu/e_fmod.c b/sysdeps/i386/fpu/e_fmod.c
>> new file mode 100644
>> index 0000000000..3625758f97
>> --- /dev/null
>> +++ b/sysdeps/i386/fpu/e_fmod.c
>> @@ -0,0 +1,2 @@
>> +#define FMOD_VERSION GLIBC_2_40
>> +#include <sysdeps/ieee754/dbl-64/e_fmod.c>
>> diff --git a/sysdeps/i386/fpu/math_err.c b/sysdeps/i386/fpu/math_err.c
>> deleted file mode 100644
>> index 1cc8931700..0000000000
>> --- a/sysdeps/i386/fpu/math_err.c
>> +++ /dev/null
>> @@ -1 +0,0 @@
>> -/* Not needed.  */
>> diff --git a/sysdeps/i386/fpu/w_fmod_compat.c b/sysdeps/i386/fpu/w_fmod_compat.c
>> deleted file mode 100644
>> index 528bfc2a13..0000000000
>> --- a/sysdeps/i386/fpu/w_fmod_compat.c
>> +++ /dev/null
>> @@ -1,15 +0,0 @@
>> -/* i386 provides an optimized __ieee752_fmod.  */
>> -#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_fmod_compat.c>
>> -libm_alias_double (__fmod_compat, fmod)
>> -#else
>> -#include <math-type-macros-double.h>
>> -#include <w_fmod_template.c>
>> -#endif
>> diff --git a/sysdeps/ieee754/dbl-64/e_fmod.c b/sysdeps/ieee754/dbl-64/e_fmod.c
>> index b33cfb1223..7651cd212a 100644
>> --- a/sysdeps/ieee754/dbl-64/e_fmod.c
>> +++ b/sysdeps/ieee754/dbl-64/e_fmod.c
>> @@ -175,7 +175,10 @@ __fmod (double x, double y)
>>  strong_alias (__fmod, __ieee754_fmod)
>>  libm_alias_finite (__ieee754_fmod, __fmod)
>>  #if LIBM_SVID_COMPAT
>> -versioned_symbol (libm, __fmod, fmod, GLIBC_2_38);
>> +# ifndef FMOD_VERSION
>> +#  define FMOD_VERSION GLIBC_2_38
>> +# endif
>> +versioned_symbol (libm, __fmod, fmod, FMOD_VERSION);
>>  libm_alias_double_other (__fmod, fmod)
>>  #else
>>  libm_alias_double (__fmod, fmod)
>> diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
>> index 8f40ddb150..30665f8b1a 100644
>> --- a/sysdeps/mach/hurd/i386/libm.abilist
>> +++ b/sysdeps/mach/hurd/i386/libm.abilist
>> @@ -1181,3 +1181,4 @@ GLIBC_2.35 fsqrt F
>>  GLIBC_2.35 fsqrtl F
>>  GLIBC_2.35 hypot F
>>  GLIBC_2.35 hypotf F
>> +GLIBC_2.40 fmod F
>> diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
>> index 5d89aaa08e..44932f111d 100644
>> --- a/sysdeps/unix/sysv/linux/i386/libm.abilist
>> +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
>> @@ -1188,3 +1188,4 @@ GLIBC_2.35 fsqrt F
>>  GLIBC_2.35 fsqrtl F
>>  GLIBC_2.35 hypot F
>>  GLIBC_2.35 hypotf F
>> +GLIBC_2.40 fmod F
>> --
>> 2.34.1
>>
> 
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build
  2024-03-27 19:57   ` H.J. Lu
@ 2024-03-27 20:39     ` Adhemerval Zanella Netto
  2024-03-27 20:55       ` Joseph Myers
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-27 20:39 UTC (permalink / raw)
  To: H.J. Lu; +Cc: libc-alpha, Joseph Myers, Florian Weimer



On 27/03/24 16:57, H.J. Lu wrote:
> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> The commit 08ddd26814 removed the static exp10 on i386 and m68k with an
>> empty w_exp10.c (required for the ABIs that uses the newly
>> implementation).  This patch fixes by adding the required symbols on the
>> arch-specific w_exp{f}_compat.c implementation.
>>
>> Checked on i686-linux-gnu and with a build for m68k-linux-gnu.
>> ---
>>  math/Makefile                            | 4 +++-
>>  sysdeps/i386/fpu/w_exp10_compat.c        | 9 +++++++--
>>  sysdeps/m68k/m680x0/fpu/w_exp10_compat.c | 9 +++++++--
>>  3 files changed, 17 insertions(+), 5 deletions(-)
>>
>> diff --git a/math/Makefile b/math/Makefile
>> index 964bf2be71..f1d210797d 100644
>> --- a/math/Makefile
>> +++ b/math/Makefile
>> @@ -367,7 +367,9 @@ $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
>>         $(PYTHON) gen-libm-test.py -c $< -a auto-libm-test-out$* -C $@
>>
>>
>> -libm-test-funcs-auto-static =
>> +libm-test-funcs-auto-static = \
>> +  exp10 \
>> +  # libm-test-funcs-auto-static
> 
> This doesn't provide confidence that static libm issues are fixed.
> I think we should add a configure option to enable static tests for
> all libm functions.

This fixes the issue for exp10 symbol and checks that it can be used
on static build for all supported type, which is the purpose of this
fix.

I do think the testing all static symbol with extra testing are valuable,
but I also think it should be done in a different patch/thread.

> 
>>  libm-test-funcs-noauto-static = \
>>    fmod \
>>    # libm-test-funcs-noauto-static
>> diff --git a/sysdeps/i386/fpu/w_exp10_compat.c b/sysdeps/i386/fpu/w_exp10_compat.c
>> index b53455386e..49a0e03385 100644
>> --- a/sysdeps/i386/fpu/w_exp10_compat.c
>> +++ b/sysdeps/i386/fpu/w_exp10_compat.c
>> @@ -1,3 +1,8 @@
>>  /* i386 provides an optimized __ieee754_exp10.  */
>> -#define NO_COMPAT_NEEDED 1
>> -#include <math/w_exp10_compat.c>
>> +#ifdef SHARED
>> +# define NO_COMPAT_NEEDED 1
>> +# include <math/w_exp10_compat.c>
>> +#else
>> +# include <math-type-macros-double.h>
>> +# include <w_exp10_template.c>
>> +#endif
>> diff --git a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
>> index 0d3e718626..350f2e4b4d 100644
>> --- a/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
>> +++ b/sysdeps/m68k/m680x0/fpu/w_exp10_compat.c
>> @@ -1,3 +1,8 @@
>>  /* m68k provides an optimized __ieee754_exp10.  */
>> -#define NO_COMPAT_NEEDED 1
>> -#include <math/w_exp10_compat.c>
>> +#ifdef SHARED
>> +# define NO_COMPAT_NEEDED 1
>> +# include <math/w_exp10_compat.c>
>> +#else
>> +# include <math-type-macros-double.h>
>> +# include <w_exp10_template.c>
>> +#endif
>> --
>> 2.34.1
>>
> 
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build
  2024-03-27 20:39     ` Adhemerval Zanella Netto
@ 2024-03-27 20:55       ` Joseph Myers
  0 siblings, 0 replies; 27+ messages in thread
From: Joseph Myers @ 2024-03-27 20:55 UTC (permalink / raw)
  To: Adhemerval Zanella Netto; +Cc: H.J. Lu, libc-alpha, Florian Weimer

On Wed, 27 Mar 2024, Adhemerval Zanella Netto wrote:

> I do think the testing all static symbol with extra testing are valuable,
> but I also think it should be done in a different patch/thread.

And testing everything with static linking shouldn't need a solution 
specific to math/ tests; either fixing --disable-shared, or adding an 
option to build *all* tests as static executables, might make more sense 
as a way of doing the global testing (as opposed to the tests added in 
this patch series for the specific bugs fixed).

-- 
Joseph S. Myers
josmyers@redhat.com


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-27 20:37     ` Adhemerval Zanella Netto
@ 2024-03-27 21:38       ` H.J. Lu
  2024-03-28 14:11         ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: H.J. Lu @ 2024-03-27 21:38 UTC (permalink / raw)
  To: Adhemerval Zanella Netto; +Cc: libc-alpha, Joseph Myers, Florian Weimer

On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 27/03/24 16:55, H.J. Lu wrote:
> > On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >> The benchtest results shows a slight improvement (Ryzen 5900, gcc
> >> 13.2.1):
> >>
> >> * sysdeps/i386/fpu/e_fmod.S:
> >>   "fmod": {
> >>    "subnormals": {
> >>     "duration": 3.68855e+09,
> >>     "iterations": 2.12608e+08,
> >>     "max": 62.012,
> >>     "min": 16.798,
> >>     "mean": 17.349
> >>    },
> >>    "normal": {
> >>     "duration": 3.88459e+09,
> >>     "iterations": 7.168e+06,
> >>     "max": 2879.12,
> >>     "min": 16.909,
> >>     "mean": 541.934
> >>    },
> >>    "close-exponents": {
> >>     "duration": 3.692e+09,
> >>     "iterations": 1.96608e+08,
> >>     "max": 66.452,
> >>     "min": 16.835,
> >>     "mean": 18.7785
> >>    }
> >>   }
> >>
> >> * generic
> >>   "fmod": {
> >>    "subnormals": {
> >>     "duration": 3.68645e+09,
> >>     "iterations": 2.2848e+08,
> >>     "max": 66.896,
> >>     "min": 15.91,
> >>     "mean": 16.1347
> >>    },
> >>    "normal": {
> >>     "duration": 4.1455e+09,
> >>     "iterations": 8.192e+06,
> >>     "max": 3376.18,
> >>     "min": 15.873,
> >>     "mean": 506.043
> >>    },
> >>    "close-exponents": {
> >>     "duration": 3.70197e+09,
> >>     "iterations": 2.08896e+08,
> >>     "max": 69.597,
> >>     "min": 15.947,
> >>     "mean": 17.7216
> >>    }
> >>   }
> >> ---
> >>  sysdeps/i386/fpu/Versions                 |  4 ++++
> >>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
> >>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
> >>  sysdeps/i386/fpu/math_err.c               |  1 -
> >>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
> >>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
> >>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
> >>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
> >>  8 files changed, 12 insertions(+), 35 deletions(-)
> >>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
> >>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
> >>  delete mode 100644 sysdeps/i386/fpu/math_err.c
> >>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
> >>
> >> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
> >> index a2eec371f1..d37bc1eae6 100644
> >> --- a/sysdeps/i386/fpu/Versions
> >> +++ b/sysdeps/i386/fpu/Versions
> >> @@ -3,4 +3,8 @@ libm {
> >>      # functions used in inline functions or macros
> >>      __expl; __expm1l;
> >>    }
> >> +  GLIBC_2.40 {
> >> +    # No SVID compatible error handling.
> >> +    fmod;
> >> +  }
> >
> > This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
> > report open for this?
> >
>
> The new version is the way to provide the system without the SVID compat
> support, which we for all ABIs but i386 on 2.38. For instance:
>
> find . -iname libm.abilist | xargs grep -w fmod
> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
> [...]
>
> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
>

Does it fix a run-time test which fails without the fix?

-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-27 21:38       ` H.J. Lu
@ 2024-03-28 14:11         ` Adhemerval Zanella Netto
  2024-03-28 14:51           ` H.J. Lu
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-28 14:11 UTC (permalink / raw)
  To: H.J. Lu; +Cc: libc-alpha, Joseph Myers, Florian Weimer



On 27/03/24 18:38, H.J. Lu wrote:
> On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 27/03/24 16:55, H.J. Lu wrote:
>>> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
>>>> 13.2.1):
>>>>
>>>> * sysdeps/i386/fpu/e_fmod.S:
>>>>   "fmod": {
>>>>    "subnormals": {
>>>>     "duration": 3.68855e+09,
>>>>     "iterations": 2.12608e+08,
>>>>     "max": 62.012,
>>>>     "min": 16.798,
>>>>     "mean": 17.349
>>>>    },
>>>>    "normal": {
>>>>     "duration": 3.88459e+09,
>>>>     "iterations": 7.168e+06,
>>>>     "max": 2879.12,
>>>>     "min": 16.909,
>>>>     "mean": 541.934
>>>>    },
>>>>    "close-exponents": {
>>>>     "duration": 3.692e+09,
>>>>     "iterations": 1.96608e+08,
>>>>     "max": 66.452,
>>>>     "min": 16.835,
>>>>     "mean": 18.7785
>>>>    }
>>>>   }
>>>>
>>>> * generic
>>>>   "fmod": {
>>>>    "subnormals": {
>>>>     "duration": 3.68645e+09,
>>>>     "iterations": 2.2848e+08,
>>>>     "max": 66.896,
>>>>     "min": 15.91,
>>>>     "mean": 16.1347
>>>>    },
>>>>    "normal": {
>>>>     "duration": 4.1455e+09,
>>>>     "iterations": 8.192e+06,
>>>>     "max": 3376.18,
>>>>     "min": 15.873,
>>>>     "mean": 506.043
>>>>    },
>>>>    "close-exponents": {
>>>>     "duration": 3.70197e+09,
>>>>     "iterations": 2.08896e+08,
>>>>     "max": 69.597,
>>>>     "min": 15.947,
>>>>     "mean": 17.7216
>>>>    }
>>>>   }
>>>> ---
>>>>  sysdeps/i386/fpu/Versions                 |  4 ++++
>>>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
>>>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
>>>>  sysdeps/i386/fpu/math_err.c               |  1 -
>>>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
>>>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
>>>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>>>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>>>>  8 files changed, 12 insertions(+), 35 deletions(-)
>>>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
>>>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
>>>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
>>>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
>>>>
>>>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
>>>> index a2eec371f1..d37bc1eae6 100644
>>>> --- a/sysdeps/i386/fpu/Versions
>>>> +++ b/sysdeps/i386/fpu/Versions
>>>> @@ -3,4 +3,8 @@ libm {
>>>>      # functions used in inline functions or macros
>>>>      __expl; __expm1l;
>>>>    }
>>>> +  GLIBC_2.40 {
>>>> +    # No SVID compatible error handling.
>>>> +    fmod;
>>>> +  }
>>>
>>> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
>>> report open for this?
>>>
>>
>> The new version is the way to provide the system without the SVID compat
>> support, which we for all ABIs but i386 on 2.38. For instance:
>>
>> find . -iname libm.abilist | xargs grep -w fmod
>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
>> [...]
>>
>> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
>>
> 
> Does it fix a run-time test which fails without the fix?
> 

Not really, but it is one less assembly implementation in favor a generic one
(which also shows a slight improvement on recent chips) and it sync i386
with generic code (so less possible issues, such as the static lib in this
patchset).

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 14:11         ` Adhemerval Zanella Netto
@ 2024-03-28 14:51           ` H.J. Lu
  2024-03-28 15:14             ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: H.J. Lu @ 2024-03-28 14:51 UTC (permalink / raw)
  To: Adhemerval Zanella Netto; +Cc: libc-alpha, Joseph Myers, Florian Weimer

On Thu, Mar 28, 2024 at 7:11 AM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 27/03/24 18:38, H.J. Lu wrote:
> > On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >>
> >>
> >> On 27/03/24 16:55, H.J. Lu wrote:
> >>> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
> >>> <adhemerval.zanella@linaro.org> wrote:
> >>>>
> >>>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
> >>>> 13.2.1):
> >>>>
> >>>> * sysdeps/i386/fpu/e_fmod.S:
> >>>>   "fmod": {
> >>>>    "subnormals": {
> >>>>     "duration": 3.68855e+09,
> >>>>     "iterations": 2.12608e+08,
> >>>>     "max": 62.012,
> >>>>     "min": 16.798,
> >>>>     "mean": 17.349
> >>>>    },
> >>>>    "normal": {
> >>>>     "duration": 3.88459e+09,
> >>>>     "iterations": 7.168e+06,
> >>>>     "max": 2879.12,
> >>>>     "min": 16.909,
> >>>>     "mean": 541.934
> >>>>    },
> >>>>    "close-exponents": {
> >>>>     "duration": 3.692e+09,
> >>>>     "iterations": 1.96608e+08,
> >>>>     "max": 66.452,
> >>>>     "min": 16.835,
> >>>>     "mean": 18.7785
> >>>>    }
> >>>>   }
> >>>>
> >>>> * generic
> >>>>   "fmod": {
> >>>>    "subnormals": {
> >>>>     "duration": 3.68645e+09,
> >>>>     "iterations": 2.2848e+08,
> >>>>     "max": 66.896,
> >>>>     "min": 15.91,
> >>>>     "mean": 16.1347
> >>>>    },
> >>>>    "normal": {
> >>>>     "duration": 4.1455e+09,
> >>>>     "iterations": 8.192e+06,
> >>>>     "max": 3376.18,
> >>>>     "min": 15.873,
> >>>>     "mean": 506.043
> >>>>    },
> >>>>    "close-exponents": {
> >>>>     "duration": 3.70197e+09,
> >>>>     "iterations": 2.08896e+08,
> >>>>     "max": 69.597,
> >>>>     "min": 15.947,
> >>>>     "mean": 17.7216
> >>>>    }
> >>>>   }
> >>>> ---
> >>>>  sysdeps/i386/fpu/Versions                 |  4 ++++
> >>>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
> >>>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
> >>>>  sysdeps/i386/fpu/math_err.c               |  1 -
> >>>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
> >>>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
> >>>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
> >>>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
> >>>>  8 files changed, 12 insertions(+), 35 deletions(-)
> >>>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
> >>>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
> >>>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
> >>>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
> >>>>
> >>>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
> >>>> index a2eec371f1..d37bc1eae6 100644
> >>>> --- a/sysdeps/i386/fpu/Versions
> >>>> +++ b/sysdeps/i386/fpu/Versions
> >>>> @@ -3,4 +3,8 @@ libm {
> >>>>      # functions used in inline functions or macros
> >>>>      __expl; __expm1l;
> >>>>    }
> >>>> +  GLIBC_2.40 {
> >>>> +    # No SVID compatible error handling.
> >>>> +    fmod;
> >>>> +  }
> >>>
> >>> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
> >>> report open for this?
> >>>
> >>
> >> The new version is the way to provide the system without the SVID compat
> >> support, which we for all ABIs but i386 on 2.38. For instance:
> >>
> >> find . -iname libm.abilist | xargs grep -w fmod
> >> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
> >> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
> >> [...]
> >>
> >> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
> >>
> >
> > Does it fix a run-time test which fails without the fix?
> >
>
> Not really, but it is one less assembly implementation in favor a generic one
> (which also shows a slight improvement on recent chips) and it sync i386
> with generic code (so less possible issues, such as the static lib in this
> patchset).

Why do we need a new symbol?

-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 14:51           ` H.J. Lu
@ 2024-03-28 15:14             ` Adhemerval Zanella Netto
       [not found]               ` <CAMe9rOqhQDA-zk=+oTvdoPpq=rGEhtan0couaZ3Z_fxeFpa=7A@mail.gmail.com>
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-28 15:14 UTC (permalink / raw)
  To: H.J. Lu; +Cc: libc-alpha, Joseph Myers, Florian Weimer



On 28/03/24 11:51, H.J. Lu wrote:
> On Thu, Mar 28, 2024 at 7:11 AM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 27/03/24 18:38, H.J. Lu wrote:
>>> On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>>
>>>>
>>>> On 27/03/24 16:55, H.J. Lu wrote:
>>>>> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>
>>>>>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
>>>>>> 13.2.1):
>>>>>>
>>>>>> * sysdeps/i386/fpu/e_fmod.S:
>>>>>>   "fmod": {
>>>>>>    "subnormals": {
>>>>>>     "duration": 3.68855e+09,
>>>>>>     "iterations": 2.12608e+08,
>>>>>>     "max": 62.012,
>>>>>>     "min": 16.798,
>>>>>>     "mean": 17.349
>>>>>>    },
>>>>>>    "normal": {
>>>>>>     "duration": 3.88459e+09,
>>>>>>     "iterations": 7.168e+06,
>>>>>>     "max": 2879.12,
>>>>>>     "min": 16.909,
>>>>>>     "mean": 541.934
>>>>>>    },
>>>>>>    "close-exponents": {
>>>>>>     "duration": 3.692e+09,
>>>>>>     "iterations": 1.96608e+08,
>>>>>>     "max": 66.452,
>>>>>>     "min": 16.835,
>>>>>>     "mean": 18.7785
>>>>>>    }
>>>>>>   }
>>>>>>
>>>>>> * generic
>>>>>>   "fmod": {
>>>>>>    "subnormals": {
>>>>>>     "duration": 3.68645e+09,
>>>>>>     "iterations": 2.2848e+08,
>>>>>>     "max": 66.896,
>>>>>>     "min": 15.91,
>>>>>>     "mean": 16.1347
>>>>>>    },
>>>>>>    "normal": {
>>>>>>     "duration": 4.1455e+09,
>>>>>>     "iterations": 8.192e+06,
>>>>>>     "max": 3376.18,
>>>>>>     "min": 15.873,
>>>>>>     "mean": 506.043
>>>>>>    },
>>>>>>    "close-exponents": {
>>>>>>     "duration": 3.70197e+09,
>>>>>>     "iterations": 2.08896e+08,
>>>>>>     "max": 69.597,
>>>>>>     "min": 15.947,
>>>>>>     "mean": 17.7216
>>>>>>    }
>>>>>>   }
>>>>>> ---
>>>>>>  sysdeps/i386/fpu/Versions                 |  4 ++++
>>>>>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
>>>>>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
>>>>>>  sysdeps/i386/fpu/math_err.c               |  1 -
>>>>>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
>>>>>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
>>>>>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>>>>>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>>>>>>  8 files changed, 12 insertions(+), 35 deletions(-)
>>>>>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
>>>>>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
>>>>>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
>>>>>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
>>>>>>
>>>>>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
>>>>>> index a2eec371f1..d37bc1eae6 100644
>>>>>> --- a/sysdeps/i386/fpu/Versions
>>>>>> +++ b/sysdeps/i386/fpu/Versions
>>>>>> @@ -3,4 +3,8 @@ libm {
>>>>>>      # functions used in inline functions or macros
>>>>>>      __expl; __expm1l;
>>>>>>    }
>>>>>> +  GLIBC_2.40 {
>>>>>> +    # No SVID compatible error handling.
>>>>>> +    fmod;
>>>>>> +  }
>>>>>
>>>>> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
>>>>> report open for this?
>>>>>
>>>>
>>>> The new version is the way to provide the system without the SVID compat
>>>> support, which we for all ABIs but i386 on 2.38. For instance:
>>>>
>>>> find . -iname libm.abilist | xargs grep -w fmod
>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
>>>> [...]
>>>>
>>>> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
>>>>
>>>
>>> Does it fix a run-time test which fails without the fix?
>>>
>>
>> Not really, but it is one less assembly implementation in favor a generic one
>> (which also shows a slight improvement on recent chips) and it sync i386
>> with generic code (so less possible issues, such as the static lib in this
>> patchset).
> 
> Why do we need a new symbol?

Because the new fmod@GLIBC_2.40 for i386 won't have the SVID handling,
similar to what has been done for other architectures with
16439f419b270184ec501c531bf20d83b6745fb0;

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
       [not found]                     ` <0e4733a3-d569-4a73-b2d3-001cc6c3d751@linaro.org>
@ 2024-03-28 16:00                       ` H.J. Lu
  2024-03-28 18:22                         ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: H.J. Lu @ 2024-03-28 16:00 UTC (permalink / raw)
  To: Adhemerval Zanella Netto, GNU C Library

On Thu, Mar 28, 2024 at 8:57 AM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 28/03/24 12:55, H.J. Lu wrote:
> > On Thu, Mar 28, 2024 at 8:48 AM Adhemerval Zanella Netto
> > <adhemerval.zanella@linaro.org> wrote:
> >>
> >>
> >>
> >> On 28/03/24 12:42, H.J. Lu wrote:
> >>> On Thu, Mar 28, 2024 at 8:14 AM Adhemerval Zanella Netto
> >>> <adhemerval.zanella@linaro.org> wrote:
> >>>>
> >>>>
> >>>>
> >>>> On 28/03/24 11:51, H.J. Lu wrote:
> >>>>> On Thu, Mar 28, 2024 at 7:11 AM Adhemerval Zanella Netto
> >>>>> <adhemerval.zanella@linaro.org> wrote:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> On 27/03/24 18:38, H.J. Lu wrote:
> >>>>>>> On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
> >>>>>>> <adhemerval.zanella@linaro.org> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 27/03/24 16:55, H.J. Lu wrote:
> >>>>>>>>> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
> >>>>>>>>> <adhemerval.zanella@linaro.org> wrote:
> >>>>>>>>>>
> >>>>>>>>>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
> >>>>>>>>>> 13.2.1):
> >>>>>>>>>>
> >>>>>>>>>> * sysdeps/i386/fpu/e_fmod.S:
> >>>>>>>>>>   "fmod": {
> >>>>>>>>>>    "subnormals": {
> >>>>>>>>>>     "duration": 3.68855e+09,
> >>>>>>>>>>     "iterations": 2.12608e+08,
> >>>>>>>>>>     "max": 62.012,
> >>>>>>>>>>     "min": 16.798,
> >>>>>>>>>>     "mean": 17.349
> >>>>>>>>>>    },
> >>>>>>>>>>    "normal": {
> >>>>>>>>>>     "duration": 3.88459e+09,
> >>>>>>>>>>     "iterations": 7.168e+06,
> >>>>>>>>>>     "max": 2879.12,
> >>>>>>>>>>     "min": 16.909,
> >>>>>>>>>>     "mean": 541.934
> >>>>>>>>>>    },
> >>>>>>>>>>    "close-exponents": {
> >>>>>>>>>>     "duration": 3.692e+09,
> >>>>>>>>>>     "iterations": 1.96608e+08,
> >>>>>>>>>>     "max": 66.452,
> >>>>>>>>>>     "min": 16.835,
> >>>>>>>>>>     "mean": 18.7785
> >>>>>>>>>>    }
> >>>>>>>>>>   }
> >>>>>>>>>>
> >>>>>>>>>> * generic
> >>>>>>>>>>   "fmod": {
> >>>>>>>>>>    "subnormals": {
> >>>>>>>>>>     "duration": 3.68645e+09,
> >>>>>>>>>>     "iterations": 2.2848e+08,
> >>>>>>>>>>     "max": 66.896,
> >>>>>>>>>>     "min": 15.91,
> >>>>>>>>>>     "mean": 16.1347
> >>>>>>>>>>    },
> >>>>>>>>>>    "normal": {
> >>>>>>>>>>     "duration": 4.1455e+09,
> >>>>>>>>>>     "iterations": 8.192e+06,
> >>>>>>>>>>     "max": 3376.18,
> >>>>>>>>>>     "min": 15.873,
> >>>>>>>>>>     "mean": 506.043
> >>>>>>>>>>    },
> >>>>>>>>>>    "close-exponents": {
> >>>>>>>>>>     "duration": 3.70197e+09,
> >>>>>>>>>>     "iterations": 2.08896e+08,
> >>>>>>>>>>     "max": 69.597,
> >>>>>>>>>>     "min": 15.947,
> >>>>>>>>>>     "mean": 17.7216
> >>>>>>>>>>    }
> >>>>>>>>>>   }
> >>>>>>>>>> ---
> >>>>>>>>>>  sysdeps/i386/fpu/Versions                 |  4 ++++
> >>>>>>>>>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
> >>>>>>>>>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
> >>>>>>>>>>  sysdeps/i386/fpu/math_err.c               |  1 -
> >>>>>>>>>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
> >>>>>>>>>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
> >>>>>>>>>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
> >>>>>>>>>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
> >>>>>>>>>>  8 files changed, 12 insertions(+), 35 deletions(-)
> >>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
> >>>>>>>>>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
> >>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
> >>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
> >>>>>>>>>>
> >>>>>>>>>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
> >>>>>>>>>> index a2eec371f1..d37bc1eae6 100644
> >>>>>>>>>> --- a/sysdeps/i386/fpu/Versions
> >>>>>>>>>> +++ b/sysdeps/i386/fpu/Versions
> >>>>>>>>>> @@ -3,4 +3,8 @@ libm {
> >>>>>>>>>>      # functions used in inline functions or macros
> >>>>>>>>>>      __expl; __expm1l;
> >>>>>>>>>>    }
> >>>>>>>>>> +  GLIBC_2.40 {
> >>>>>>>>>> +    # No SVID compatible error handling.
> >>>>>>>>>> +    fmod;
> >>>>>>>>>> +  }
> >>>>>>>>>
> >>>>>>>>> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
> >>>>>>>>> report open for this?
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>> The new version is the way to provide the system without the SVID compat
> >>>>>>>> support, which we for all ABIs but i386 on 2.38. For instance:
> >>>>>>>>
> >>>>>>>> find . -iname libm.abilist | xargs grep -w fmod
> >>>>>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
> >>>>>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
> >>>>>>>> [...]
> >>>>>>>>
> >>>>>>>> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
> >>>>>>>>
> >>>>>>>
> >>>>>>> Does it fix a run-time test which fails without the fix?
> >>>>>>>
> >>>>>>
> >>>>>> Not really, but it is one less assembly implementation in favor a generic one
> >>>>>> (which also shows a slight improvement on recent chips) and it sync i386
> >>>>>> with generic code (so less possible issues, such as the static lib in this
> >>>>>> patchset).
> >>>>>
> >>>>> Why do we need a new symbol?
> >>>>
> >>>> Because the new fmod@GLIBC_2.40 for i386 won't have the SVID handling,
> >>>> similar to what has been done for other architectures with
> >>>> 16439f419b270184ec501c531bf20d83b6745fb0;
> >>>
> >>> Does it change i386 fmod behavior? If yes, we need a testcase to verify it.
> >>> If not, why is it needed?
> >>>
> >>
> >> It is not strictly required, but it makes i386 has one less assembly optimization
> >> that do not follow the rest of the code and it optimizes it slight because. Since
> >> we do actually have check for SVID, the default math tests already check the
> >> required symbol semantic.
> >
> > fmod@GLIBC_2.40 is added because of the SVID handling.  But there is no
> > user visible behavior change.  Is this correct?
>
> The user visible is the missing SVID handling (which I think noone actually uses
> it).  That's the main reason we need the compat dance and this extra complexity.
> Maybe one day we just can drop this for good...

If we want to provide the SVID compatibility, 2 testcases are needed:

1.  A testcase to show that the new implementation is incompatible with SVID.
2.  A testcase to show that the compat symbol provides the SVID compatibility.


-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 16:00                       ` H.J. Lu
@ 2024-03-28 18:22                         ` Adhemerval Zanella Netto
  2024-03-28 18:38                           ` Joseph Myers
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-28 18:22 UTC (permalink / raw)
  To: H.J. Lu, GNU C Library



On 28/03/24 13:00, H.J. Lu wrote:
> On Thu, Mar 28, 2024 at 8:57 AM Adhemerval Zanella Netto
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 28/03/24 12:55, H.J. Lu wrote:
>>> On Thu, Mar 28, 2024 at 8:48 AM Adhemerval Zanella Netto
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>>
>>>>
>>>> On 28/03/24 12:42, H.J. Lu wrote:
>>>>> On Thu, Mar 28, 2024 at 8:14 AM Adhemerval Zanella Netto
>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 28/03/24 11:51, H.J. Lu wrote:
>>>>>>> On Thu, Mar 28, 2024 at 7:11 AM Adhemerval Zanella Netto
>>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 27/03/24 18:38, H.J. Lu wrote:
>>>>>>>>> On Wed, Mar 27, 2024 at 1:37 PM Adhemerval Zanella Netto
>>>>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 27/03/24 16:55, H.J. Lu wrote:
>>>>>>>>>>> On Wed, Mar 27, 2024 at 12:40 PM Adhemerval Zanella
>>>>>>>>>>> <adhemerval.zanella@linaro.org> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> The benchtest results shows a slight improvement (Ryzen 5900, gcc
>>>>>>>>>>>> 13.2.1):
>>>>>>>>>>>>
>>>>>>>>>>>> * sysdeps/i386/fpu/e_fmod.S:
>>>>>>>>>>>>   "fmod": {
>>>>>>>>>>>>    "subnormals": {
>>>>>>>>>>>>     "duration": 3.68855e+09,
>>>>>>>>>>>>     "iterations": 2.12608e+08,
>>>>>>>>>>>>     "max": 62.012,
>>>>>>>>>>>>     "min": 16.798,
>>>>>>>>>>>>     "mean": 17.349
>>>>>>>>>>>>    },
>>>>>>>>>>>>    "normal": {
>>>>>>>>>>>>     "duration": 3.88459e+09,
>>>>>>>>>>>>     "iterations": 7.168e+06,
>>>>>>>>>>>>     "max": 2879.12,
>>>>>>>>>>>>     "min": 16.909,
>>>>>>>>>>>>     "mean": 541.934
>>>>>>>>>>>>    },
>>>>>>>>>>>>    "close-exponents": {
>>>>>>>>>>>>     "duration": 3.692e+09,
>>>>>>>>>>>>     "iterations": 1.96608e+08,
>>>>>>>>>>>>     "max": 66.452,
>>>>>>>>>>>>     "min": 16.835,
>>>>>>>>>>>>     "mean": 18.7785
>>>>>>>>>>>>    }
>>>>>>>>>>>>   }
>>>>>>>>>>>>
>>>>>>>>>>>> * generic
>>>>>>>>>>>>   "fmod": {
>>>>>>>>>>>>    "subnormals": {
>>>>>>>>>>>>     "duration": 3.68645e+09,
>>>>>>>>>>>>     "iterations": 2.2848e+08,
>>>>>>>>>>>>     "max": 66.896,
>>>>>>>>>>>>     "min": 15.91,
>>>>>>>>>>>>     "mean": 16.1347
>>>>>>>>>>>>    },
>>>>>>>>>>>>    "normal": {
>>>>>>>>>>>>     "duration": 4.1455e+09,
>>>>>>>>>>>>     "iterations": 8.192e+06,
>>>>>>>>>>>>     "max": 3376.18,
>>>>>>>>>>>>     "min": 15.873,
>>>>>>>>>>>>     "mean": 506.043
>>>>>>>>>>>>    },
>>>>>>>>>>>>    "close-exponents": {
>>>>>>>>>>>>     "duration": 3.70197e+09,
>>>>>>>>>>>>     "iterations": 2.08896e+08,
>>>>>>>>>>>>     "max": 69.597,
>>>>>>>>>>>>     "min": 15.947,
>>>>>>>>>>>>     "mean": 17.7216
>>>>>>>>>>>>    }
>>>>>>>>>>>>   }
>>>>>>>>>>>> ---
>>>>>>>>>>>>  sysdeps/i386/fpu/Versions                 |  4 ++++
>>>>>>>>>>>>  sysdeps/i386/fpu/e_fmod.S                 | 18 ------------------
>>>>>>>>>>>>  sysdeps/i386/fpu/e_fmod.c                 |  2 ++
>>>>>>>>>>>>  sysdeps/i386/fpu/math_err.c               |  1 -
>>>>>>>>>>>>  sysdeps/i386/fpu/w_fmod_compat.c          | 15 ---------------
>>>>>>>>>>>>  sysdeps/ieee754/dbl-64/e_fmod.c           |  5 ++++-
>>>>>>>>>>>>  sysdeps/mach/hurd/i386/libm.abilist       |  1 +
>>>>>>>>>>>>  sysdeps/unix/sysv/linux/i386/libm.abilist |  1 +
>>>>>>>>>>>>  8 files changed, 12 insertions(+), 35 deletions(-)
>>>>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/e_fmod.S
>>>>>>>>>>>>  create mode 100644 sysdeps/i386/fpu/e_fmod.c
>>>>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/math_err.c
>>>>>>>>>>>>  delete mode 100644 sysdeps/i386/fpu/w_fmod_compat.c
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/sysdeps/i386/fpu/Versions b/sysdeps/i386/fpu/Versions
>>>>>>>>>>>> index a2eec371f1..d37bc1eae6 100644
>>>>>>>>>>>> --- a/sysdeps/i386/fpu/Versions
>>>>>>>>>>>> +++ b/sysdeps/i386/fpu/Versions
>>>>>>>>>>>> @@ -3,4 +3,8 @@ libm {
>>>>>>>>>>>>      # functions used in inline functions or macros
>>>>>>>>>>>>      __expl; __expm1l;
>>>>>>>>>>>>    }
>>>>>>>>>>>> +  GLIBC_2.40 {
>>>>>>>>>>>> +    # No SVID compatible error handling.
>>>>>>>>>>>> +    fmod;
>>>>>>>>>>>> +  }
>>>>>>>>>>>
>>>>>>>>>>> This changes the ABI.  I assume that it fixes a real bug.   Is there a bug
>>>>>>>>>>> report open for this?
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> The new version is the way to provide the system without the SVID compat
>>>>>>>>>> support, which we for all ABIs but i386 on 2.38. For instance:
>>>>>>>>>>
>>>>>>>>>> find . -iname libm.abilist | xargs grep -w fmod
>>>>>>>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.0 fmod F
>>>>>>>>>> ./sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist:GLIBC_2.38 fmod F
>>>>>>>>>> [...]
>>>>>>>>>>
>>>>>>>>>> For i386 specifically, the old SVID symbol will be kept as fmod@GLIBC_2.0.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Does it fix a run-time test which fails without the fix?
>>>>>>>>>
>>>>>>>>
>>>>>>>> Not really, but it is one less assembly implementation in favor a generic one
>>>>>>>> (which also shows a slight improvement on recent chips) and it sync i386
>>>>>>>> with generic code (so less possible issues, such as the static lib in this
>>>>>>>> patchset).
>>>>>>>
>>>>>>> Why do we need a new symbol?
>>>>>>
>>>>>> Because the new fmod@GLIBC_2.40 for i386 won't have the SVID handling,
>>>>>> similar to what has been done for other architectures with
>>>>>> 16439f419b270184ec501c531bf20d83b6745fb0;
>>>>>
>>>>> Does it change i386 fmod behavior? If yes, we need a testcase to verify it.
>>>>> If not, why is it needed?
>>>>>
>>>>
>>>> It is not strictly required, but it makes i386 has one less assembly optimization
>>>> that do not follow the rest of the code and it optimizes it slight because. Since
>>>> we do actually have check for SVID, the default math tests already check the
>>>> required symbol semantic.
>>>
>>> fmod@GLIBC_2.40 is added because of the SVID handling.  But there is no
>>> user visible behavior change.  Is this correct?
>>
>> The user visible is the missing SVID handling (which I think noone actually uses
>> it).  That's the main reason we need the compat dance and this extra complexity.
>> Maybe one day we just can drop this for good...
> 
> If we want to provide the SVID compatibility, 2 testcases are needed:
> 
> 1.  A testcase to show that the new implementation is incompatible with SVID.
> 2.  A testcase to show that the compat symbol provides the SVID compatibility.

We don't really have SVID compatibility tests for any other optimization/simplification,
and although I don't really oppose on adding I also thinking that this is making this
change even more complicated than it would require.

I can drop the i386 changes to use generic implementations if you think it would
simplify this patchset.


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 18:22                         ` Adhemerval Zanella Netto
@ 2024-03-28 18:38                           ` Joseph Myers
  2024-03-28 19:37                             ` Adhemerval Zanella Netto
  0 siblings, 1 reply; 27+ messages in thread
From: Joseph Myers @ 2024-03-28 18:38 UTC (permalink / raw)
  To: Adhemerval Zanella Netto; +Cc: H.J. Lu, GNU C Library

On Thu, 28 Mar 2024, Adhemerval Zanella Netto wrote:

> We don't really have SVID compatibility tests for any other 
> optimization/simplification, and although I don't really oppose on 
> adding I also thinking that this is making this change even more 
> complicated than it would require.

We have math/test-matherr* as generic tests of matherr working with 
binaries that specifically use the compat symbol matherr and not with 
newly linked binaries.  Those don't however attempt to test properties of 
specific symbols for individual libm functions.

A change like the present one is not meant to be user-visible for any 
newly linked binary, as a legitimate newly linked binary couldn't link 
against the matherr compat symbol anyway.  And we don't have any attempt 
to ensure that old symbol versions of individual libm functions can be 
used together with the compat symbol of matherr - just that the compat 
symbol of matherr works with one libm function.

-- 
Joseph S. Myers
josmyers@redhat.com


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 18:38                           ` Joseph Myers
@ 2024-03-28 19:37                             ` Adhemerval Zanella Netto
  2024-03-28 19:57                               ` H.J. Lu
  0 siblings, 1 reply; 27+ messages in thread
From: Adhemerval Zanella Netto @ 2024-03-28 19:37 UTC (permalink / raw)
  To: Joseph Myers; +Cc: H.J. Lu, GNU C Library



On 28/03/24 15:38, Joseph Myers wrote:
> On Thu, 28 Mar 2024, Adhemerval Zanella Netto wrote:
> 
>> We don't really have SVID compatibility tests for any other 
>> optimization/simplification, and although I don't really oppose on 
>> adding I also thinking that this is making this change even more 
>> complicated than it would require.
> 
> We have math/test-matherr* as generic tests of matherr working with 
> binaries that specifically use the compat symbol matherr and not with 
> newly linked binaries.  Those don't however attempt to test properties of 
> specific symbols for individual libm functions.

I meant that we don't have explicit SVID tests that check its semantic
(including return code, matherr status, stdout return code), like we do
for some compat symbols.  And I took that this what H.J is asking about.

> 
> A change like the present one is not meant to be user-visible for any 
> newly linked binary, as a legitimate newly linked binary couldn't link 
> against the matherr compat symbol anyway.  And we don't have any attempt 
> to ensure that old symbol versions of individual libm functions can be 
> used together with the compat symbol of matherr - just that the compat 
> symbol of matherr works with one libm function.
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 03/10] i386: Use generic fmod
  2024-03-28 19:37                             ` Adhemerval Zanella Netto
@ 2024-03-28 19:57                               ` H.J. Lu
  0 siblings, 0 replies; 27+ messages in thread
From: H.J. Lu @ 2024-03-28 19:57 UTC (permalink / raw)
  To: Adhemerval Zanella Netto; +Cc: Joseph Myers, GNU C Library

On Thu, Mar 28, 2024 at 12:37 PM Adhemerval Zanella Netto
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 28/03/24 15:38, Joseph Myers wrote:
> > On Thu, 28 Mar 2024, Adhemerval Zanella Netto wrote:
> >
> >> We don't really have SVID compatibility tests for any other
> >> optimization/simplification, and although I don't really oppose on
> >> adding I also thinking that this is making this change even more
> >> complicated than it would require.
> >
> > We have math/test-matherr* as generic tests of matherr working with
> > binaries that specifically use the compat symbol matherr and not with
> > newly linked binaries.  Those don't however attempt to test properties of
> > specific symbols for individual libm functions.
>
> I meant that we don't have explicit SVID tests that check its semantic
> (including return code, matherr status, stdout return code), like we do
> for some compat symbols.  And I took that this what H.J is asking about.

Yes, this is what I was asking about.  If we don't have the SVID tests, we
don't need to provide the SVID compat symbols.

-- 
H.J.

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2024-03-28 19:58 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-27 19:40 [PATCH v2 00/10] Fix some libm static issues Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 01/10] math: Add support for auto static math tests Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 02/10] math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488) Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 03/10] i386: Use generic fmod Adhemerval Zanella
2024-03-27 19:55   ` H.J. Lu
2024-03-27 20:37     ` Adhemerval Zanella Netto
2024-03-27 21:38       ` H.J. Lu
2024-03-28 14:11         ` Adhemerval Zanella Netto
2024-03-28 14:51           ` H.J. Lu
2024-03-28 15:14             ` Adhemerval Zanella Netto
     [not found]               ` <CAMe9rOqhQDA-zk=+oTvdoPpq=rGEhtan0couaZ3Z_fxeFpa=7A@mail.gmail.com>
     [not found]                 ` <9bf7af32-afa3-439c-84c0-76e76b220e44@linaro.org>
     [not found]                   ` <CAMe9rOqTcmRc9mvguQnDRFb=BTjZJ5CptxjtPjtBGoB-a5mc6Q@mail.gmail.com>
     [not found]                     ` <0e4733a3-d569-4a73-b2d3-001cc6c3d751@linaro.org>
2024-03-28 16:00                       ` H.J. Lu
2024-03-28 18:22                         ` Adhemerval Zanella Netto
2024-03-28 18:38                           ` Joseph Myers
2024-03-28 19:37                             ` Adhemerval Zanella Netto
2024-03-28 19:57                               ` H.J. Lu
2024-03-27 19:40 ` [PATCH v2 04/10] i386: Use generic fmodf Adhemerval Zanella
2024-03-27 19:55   ` H.J. Lu
2024-03-27 19:40 ` [PATCH v2 05/10] math: Fix i386 and m68k exp10 on static build Adhemerval Zanella
2024-03-27 19:57   ` H.J. Lu
2024-03-27 20:39     ` Adhemerval Zanella Netto
2024-03-27 20:55       ` Joseph Myers
2024-03-27 19:40 ` [PATCH v2 06/10] i386: Use generic exp10 Adhemerval Zanella
2024-03-27 20:14   ` H.J. Lu
2024-03-27 19:40 ` [PATCH v2 07/10] math: Fix isnanf128 static build Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 08/10] math: Provided copysignf128 for static libm on alpha, s390, and sparcv9 Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 09/10] math: Provide frexpf128 " Adhemerval Zanella
2024-03-27 19:40 ` [PATCH v2 10/10] math: Provide modf128 " Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).