diff options
| author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2025-10-31 13:08:51 -0300 |
|---|---|---|
| committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2025-11-04 04:14:01 -0300 |
| commit | 0e1a1178ee22a25ff4568f51a2fec85451b17b04 (patch) | |
| tree | 4f500bd6e226c7621c2c557a585f85c8f5070663 /sysdeps/unix | |
| parent | c4c6c79d70888702dcabfb208fbb664d9d9e6667 (diff) | |
math: Remove the SVID error handling from remainder
The optimized i386 version is faster than the generic one, and
gcc implements it through the builtin. This optimization enables
us to migrate the implementation to a C version. The performance
on a Zen3 chip is similar to the SVID one.
The m68k provided an optimized version through __m81_u(remainderf)
(mathimpl.h), and gcc does not implement it through a builtin
(different than i386).
Performance improves a bit on x86_64 (Zen3, gcc 15.2.1):
reciprocal-throughput input master NO-SVID improvement
x86_64 subnormals 18.8522 16.2506 13.80%
x86_64 normal 421.8260 403.9270 4.24%
x86_64 close-exponent 21.0579 18.7642 10.89%
i686 subnormals 21.3443 21.4229 -0.37%
i686 normal 525.8380 538.807 -2.47%
i686 close-exponent 21.6589 21.7983 -0.64%
Tested on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Diffstat (limited to 'sysdeps/unix')
24 files changed, 24 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist index b3ef9288c8..d799f204fa 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist index e05ee8fc09..0d608533c9 100644 --- a/sysdeps/unix/sysv/linux/alpha/libm.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist @@ -1453,6 +1453,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist index ccbc848841..d60a11026c 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist index ccbc848841..d60a11026c 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist index 268d158943..60ce950d8a 100644 --- a/sysdeps/unix/sysv/linux/hppa/libm.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist index cb043bc598..b4164516f6 100644 --- a/sysdeps/unix/sysv/linux/i386/libm.abilist +++ b/sysdeps/unix/sysv/linux/i386/libm.abilist @@ -1335,6 +1335,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist index ccbc848841..d60a11026c 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index b4927dbb2e..5875a5c80c 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -992,6 +992,7 @@ GLIBC_2.43 fmodf F GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist index 90089d1428..e24b8ef83a 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist index 90089d1428..e24b8ef83a 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist index 666d67867d..42afecec7c 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist index ee49433203..2850dacf7f 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist index fa7d38edc6..71f1e74f75 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist @@ -1106,6 +1106,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist index cb79ecc5d7..2cab971c10 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist @@ -1105,6 +1105,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist index e7d13a48e9..6574ba9908 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist @@ -1099,6 +1099,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist index 8362b4eb68..e4888b6cf2 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist @@ -1483,6 +1483,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist index 56a38af71b..ccc0de5b98 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist @@ -1397,6 +1397,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist index 457a2856d9..871c473efa 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist @@ -1397,6 +1397,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist index 8a026ba740..7a0edfe5c3 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist index 8a026ba740..7a0edfe5c3 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist @@ -959,6 +959,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist index af62388c05..acfe74ef6f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist @@ -1404,6 +1404,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist index 61dc56a894..dc28560fdc 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist @@ -1294,6 +1294,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist index cea77965ca..3690000175 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist @@ -1327,6 +1327,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist index c4d8322250..c41a781b5c 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist @@ -1327,6 +1327,7 @@ GLIBC_2.43 j0f F GLIBC_2.43 j1f F GLIBC_2.43 jnf F GLIBC_2.43 log10f F +GLIBC_2.43 remainder F GLIBC_2.43 remainderf F GLIBC_2.43 y0f F GLIBC_2.43 y1f F |
