mirror of
https://sourceware.org/git/glibc.git
synced 2026-10-24 01:33:52 +03:00
math: Remove the SVID error handling from atan2f
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>
This commit is contained in:
@@ -691,6 +691,7 @@ libm {
|
||||
acosf;
|
||||
acoshf;
|
||||
asinf;
|
||||
atan2f;
|
||||
atanhf;
|
||||
coshf;
|
||||
j0f;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
1
sysdeps/ieee754/flt-32/w_atan2f.c
Normal file
1
sysdeps/ieee754/flt-32/w_atan2f.c
Normal file
@@ -0,0 +1 @@
|
||||
/* Not needed. */
|
||||
8
sysdeps/m68k/m680x0/fpu/w_atan2f_compat.c
Normal file
8
sysdeps/m68k/m680x0/fpu/w_atan2f_compat.c
Normal file
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user