]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Remove the SVID error handling from atan2f
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 4 Nov 2025 16:20:00 +0000 (13:20 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 5 Nov 2025 10:15:52 +0000 (07:15 -0300)
It improves latency for about 3-6% and throughput for about 5-12%.

Tested on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
29 files changed:
math/Versions
math/w_atan2f_compat.c
sysdeps/ieee754/flt-32/e_atan2f.c
sysdeps/ieee754/flt-32/w_atan2f.c [new file with mode: 0644]
sysdeps/m68k/m680x0/fpu/w_atan2f_compat.c [new file with mode: 0644]
sysdeps/mach/hurd/i386/libm.abilist
sysdeps/unix/sysv/linux/aarch64/libm.abilist
sysdeps/unix/sysv/linux/alpha/libm.abilist
sysdeps/unix/sysv/linux/arm/be/libm.abilist
sysdeps/unix/sysv/linux/arm/le/libm.abilist
sysdeps/unix/sysv/linux/hppa/libm.abilist
sysdeps/unix/sysv/linux/i386/libm.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
sysdeps/unix/sysv/linux/sh/be/libm.abilist
sysdeps/unix/sysv/linux/sh/le/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist

index 272f3f3a74a9079cdfec2d81e82f0e1757064ee0..bf57cc9176f8e2eed98d1f443350b753527df728 100644 (file)
@@ -691,6 +691,7 @@ libm {
     acosf;
     acoshf;
     asinf;
+    atan2f;
     atanhf;
     coshf;
     j0f;
index 047f853f2c4c1482e3511589d74a183d008c966e..f199fa66e3dc9954fce80421e3515163ae16270f 100644 (file)
@@ -26,9 +26,9 @@
 #include <libm-alias-float.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_43)
 float
-__atan2f (float y, float x)
+__atan2_compatf (float y, float x)
 {
   float z;
 
@@ -40,5 +40,10 @@ __atan2f (float y, float x)
     __set_errno (ERANGE);
   return z;
 }
-libm_alias_float (__atan2, atan2)
+# ifdef NO_COMPAT_NEEDED
+strong_alias (__atan2_compatf, __atan2f)
+libm_alias_float (__atan2_compat, atan2)
+# else
+compat_symbol (libm, __atan2_compatf, atan2f, GLIBC_2_0);
+# endif
 #endif
index 1c72845c7c8df79bfea07a65bb1798e22de1f260..03070e017daf62aa3e2a30d027894652471d37da 100644 (file)
@@ -3,7 +3,7 @@
 Copyright (c) 2022-2024 Alexei Sibidanov and Paul Zimmermann.
 
 The original version of this file was copied from the CORE-MATH
-project (file src/binary32/atan2/atan2f.c, revision 7835c5d).
+project (file src/binary32/atan2/atan2f.c, revision 9b28a4a).
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -28,6 +28,8 @@ SOFTWARE.
 #include <math.h>
 #include <stdint.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-float.h>
+#include <math-svid-compat.h>
 #include "math_config.h"
 
 static inline double
@@ -85,11 +87,15 @@ cr_atan2f_tiny (float y, float x)
       else
        t -= 1;
     }
-  return asdouble (t);
+  double r = asdouble (t);
+  float rf = r;
+  if (__glibc_unlikely (rf == 0.0f))
+    return __math_uflowf (t >> 63);
+  return rf;
 }
 
 float
-__ieee754_atan2f (float y, float x)
+__atan2f (float y, float x)
 {
   static const double cn[] =
     {
@@ -269,6 +275,16 @@ __ieee754_atan2f (float y, float x)
        }
       r = th + tm;
     }
-  return r;
+  float rf = r;
+  if (__glibc_unlikely (rf == 0.0f))
+    return __math_uflowf (asuint (rf) >> 1);
+  return rf;
 }
+strong_alias (__atan2f, __ieee754_atan2f)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __atan2f, atan2f, GLIBC_2_43);
+libm_alias_float_other (__atan2, atan2)
+#else
+libm_alias_float (__atan2, atan2)
+#endif
 libm_alias_finite (__ieee754_atan2f, __atan2f)
diff --git a/sysdeps/ieee754/flt-32/w_atan2f.c b/sysdeps/ieee754/flt-32/w_atan2f.c
new file mode 100644 (file)
index 0000000..1cc8931
--- /dev/null
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/m68k/m680x0/fpu/w_atan2f_compat.c b/sysdeps/m68k/m680x0/fpu/w_atan2f_compat.c
new file mode 100644 (file)
index 0000000..ebc8035
--- /dev/null
@@ -0,0 +1,8 @@
+/* m68k provides an optimized __ieee754_atan2f.  */
+#ifdef SHARED
+# define NO_COMPAT_NEEDED 1
+# include <math/w_atan2f_compat.c>
+#else
+# include <math-type-macros-float.h>
+# include <w_atan2_template.c>
+#endif
index 275b733d02d81b172180758a516e4574a3bc2179..024bc15fe5bfce93cc9f447025863f2738f9d0fe 100644 (file)
@@ -1320,6 +1320,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 fmod F
index d374f579238a47383b808b7db989cb18c252f6af..9e803a74ac68c7b79687471b49f4894f0c7b1d97 100644 (file)
@@ -1288,6 +1288,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index dcc203d56d08a9f8a3ae215555175d7ac3af8bb3..dbbad3c8fb7ddf94fc2c479fc149f8de567bf2e2 100644 (file)
@@ -1447,6 +1447,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 0a31a7f35a3daf977745ee88548c9c1d6b73f7fb..b819f6d8d0f45fc779759a426179ac54c47ebd6b 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 0a31a7f35a3daf977745ee88548c9c1d6b73f7fb..b819f6d8d0f45fc779759a426179ac54c47ebd6b 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 5b1ad5c48463580a5b821135922135ba4b95077a..0091839d7303ffa04a8e88e9205aa9d21c569a5e 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index da5e21bd0ac113509366bf370b778258f043c991..6fc86a92303055ecada2937ce1bd77e8970af4e4 100644 (file)
@@ -1327,6 +1327,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 fmod F
index 0a31a7f35a3daf977745ee88548c9c1d6b73f7fb..b819f6d8d0f45fc779759a426179ac54c47ebd6b 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index c13265d57973cfabec2a7a59f271542cf6fe1edb..2f6ac7784d74296cf1fdebbfaca13cd3e3c0e578 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index c13265d57973cfabec2a7a59f271542cf6fe1edb..2f6ac7784d74296cf1fdebbfaca13cd3e3c0e578 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index b2bbf3438ca2bc3523754b131ab4e420fe01eb6e..92eaa36b8de8a02790e41e2ee8f344d6e233b6fb 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index ce012e3a2405efd13f83716c66d0de4a18562c78..13f08310832ac1919c3dd40b89a06ec9e857121a 100644 (file)
@@ -1288,6 +1288,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 1815b3046155f070ae0d71aff0e824f8102050c9..80a5aaf8b884de99cb7a693f2b5cfb720e48eded 100644 (file)
@@ -1100,6 +1100,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 83c85cc5b4642ad5610cb9714d40539203b78b6f..2a876cae98806dae489ac73b42a071439f07a34c 100644 (file)
@@ -1099,6 +1099,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index fff8c29909c6e2cb62b51bbac43a2788405217b7..4cbec9212fe0485f6e7e2eec3b4c9d65de5f1575 100644 (file)
@@ -1093,6 +1093,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 89fb06eace938cd113db6726a49b9dc1b23eedb9..55b3fa1906db02b5a9362a8af0714174a01db7a5 100644 (file)
@@ -1477,6 +1477,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 7f5d34298721e4e97419ca1b0e0fd68a0405a361..61cc0a5ba1b97a2c2ad1b7aa3d6f513f89cee20e 100644 (file)
@@ -1391,6 +1391,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 7b9734458278b54b187dccb1040d93048cfe9153..1b4db358a4cb6d78f3811c0544cb353181f14ae5 100644 (file)
@@ -1391,6 +1391,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 9cea7f87a5e0afda6e3e1d9162256df6bb149d6f..32857b8b54e3c7fc7c64d114c8b6d918168f3c92 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 9cea7f87a5e0afda6e3e1d9162256df6bb149d6f..32857b8b54e3c7fc7c64d114c8b6d918168f3c92 100644 (file)
@@ -953,6 +953,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index edd6cce2264ff7c4d5383054c1766a7753b5f23a..364f51b035938c5d2723cd1913b7c2646fdcc025 100644 (file)
@@ -1398,6 +1398,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 201004c62cb9ae20b16b4e7552bb19ebada3062b..49e898d5eb8149478918bcd560f7d2b709eec49f 100644 (file)
@@ -1288,6 +1288,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index 4d9e27cb15aeaac637cb4256b5ee59418b8b2d5a..73b55ae4dd83c33cce72ca806b9f753b625a736d 100644 (file)
@@ -1321,6 +1321,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F
index a411d376eae5f153c4679f3e217074d9640ac1d0..a138d3e0703e45470c289142c8cc8fdfddc64ce6 100644 (file)
@@ -1321,6 +1321,7 @@ GLIBC_2.42 rsqrtl F
 GLIBC_2.43 acosf F
 GLIBC_2.43 acoshf F
 GLIBC_2.43 asinf F
+GLIBC_2.43 atan2f F
 GLIBC_2.43 atanhf F
 GLIBC_2.43 coshf F
 GLIBC_2.43 j0f F