Implement C23 atan2pi

C23 adds various <math.h> function families originally defined in TS
18661-4.  Add the atan2pi functions (atan2(y,x)/pi).

Tested for x86_64 and x86, and with build-many-glibcs.py.
This commit is contained in:
Joseph Myers 2024-12-12 20:57:44 +00:00
parent 3ac826b020
commit 3374de9038
51 changed files with 14869 additions and 2 deletions

3
NEWS
View file

@ -36,7 +36,8 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- Trigonometric functions: acospi, asinpi, atanpi, cospi, sinpi, tanpi.
- Trigonometric functions: acospi, asinpi, atan2pi, atanpi, cospi,
sinpi, tanpi.
* The GNU C Library now supports a feature test macro _ISOC2Y_SOURCE to
enable features from the draft ISO C2Y standard. Only some features from

View file

@ -490,6 +490,20 @@ result is in the interval between @code{-0.5} and @code{0.5}
The @code{atanpi} functions are from TS 18661-4:2015.
@end deftypefun
@deftypefun double atan2pi (double @var{y}, double @var{x})
@deftypefunx float atan2pif (float @var{y}, float @var{x})
@deftypefunx {long double} atan2pil (long double @var{y}, long double @var{x})
@deftypefunx _FloatN atan2pifN (_Float@var{N} @var{y}, _Float@var{N} @var{x})
@deftypefunx _FloatNx atan2pifNx (_Float@var{N}x @var{y}, _Float@var{N}x @var{x})
@standards{TS 18661-4:2015, math.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These function computes the arctangent of @var{y}/@var{x}, divided by
pi, with the signs of both arguments used to determine the quadrant of
the result, as for @code{atan2}.
The @code{atan2pi} functions are from TS 18661-4:2015.
@end deftypefun
@cindex inverse complex trigonometric functions
@w{ISO C99} defines complex versions of the inverse trig functions.

View file

@ -96,6 +96,7 @@ gen-libm-calls = \
k_casinhF \
s_acospiF \
s_asinpiF \
s_atan2piF \
s_atanpiF \
s_cacosF \
s_cacoshF \
@ -627,6 +628,7 @@ libm-test-funcs-auto = \
asinpi \
atan \
atan2 \
atan2pi \
atanh \
atanpi \
cabs \
@ -938,6 +940,7 @@ tgmath3-macros = \
asinpi \
atan \
atan2 \
atan2pi \
atanh \
atanpi \
carg \
@ -1323,6 +1326,7 @@ CFLAGS-s_asinh.c += -fno-builtin-asinhl
CFLAGS-s_asinpi.c += -fno-builtin-asinpil
CFLAGS-s_atan.c += -fno-builtin-atanl
CFLAGS-w_atan2.c += -fno-builtin-atan2l
CFLAGS-s_atan2pi.c += -fno-builtin-atan2pil
CFLAGS-w_atanh.c += -fno-builtin-atanhl
CFLAGS-s_atanpi.c += -fno-builtin-atanpil
CFLAGS-s_cabs.c += -fno-builtin-cabsl
@ -1467,6 +1471,7 @@ CFLAGS-s_asinh.c += -fno-builtin-asinhf32x -fno-builtin-asinhf64
CFLAGS-s_asinpi.c += -fno-builtin-asinpif32x -fno-builtin-asinpif64
CFLAGS-s_atan.c += -fno-builtin-atanf32x -fno-builtin-atanf64
CFLAGS-w_atan2.c += -fno-builtin-atan2f32x -fno-builtin-atan2f64
CFLAGS-s_atan2pi.c += -fno-builtin-atan2pif32x -fno-builtin-atan2pif64
CFLAGS-w_atanh.c += -fno-builtin-atanhf32x -fno-builtin-atanhf64
CFLAGS-s_atanpi.c += -fno-builtin-atanpif32x -fno-builtin-atanpif64
CFLAGS-s_cabs.c += -fno-builtin-cabsf32x -fno-builtin-cabsf64
@ -1597,6 +1602,7 @@ CFLAGS-s_asinhf.c += -fno-builtin-asinhf32
CFLAGS-s_asinpif.c += -fno-builtin-asinpif32
CFLAGS-s_atanf.c += -fno-builtin-atanf32
CFLAGS-w_atan2f.c += -fno-builtin-atan2f32
CFLAGS-s_atan2pif.c += -fno-builtin-atan2pif32
CFLAGS-w_atanhf.c += -fno-builtin-atanhf32
CFLAGS-s_atanpif.c += -fno-builtin-atanpif32
CFLAGS-s_cabsf.c += -fno-builtin-cabsf32

View file

@ -657,6 +657,7 @@ libm {
# Functions not involving _Float64x or _Float128, for all configurations.
acospi; acospif; acospil; acospif32; acospif64; acospif32x;
asinpi; asinpif; asinpil; asinpif32; asinpif64; asinpif32x;
atan2pi; atan2pif; atan2pil; atan2pif32; atan2pif64; atan2pif32x;
atanpi; atanpif; atanpil; atanpif32; atanpif64; atanpif32x;
cospi; cospif; cospil; cospif32; cospif64; cospif32x;
sinpi; sinpif; sinpil; sinpif32; sinpif64; sinpif32x;
@ -664,6 +665,7 @@ libm {
# Functions involving _Float64x or _Float128, for some configurations.
acospif64x; acospif128;
asinpif64x; asinpif128;
atan2pif64x; atan2pif128;
atanpif64x; atanpif128;
cospif64x; cospif128;
sinpif64x; sinpif128;

View file

@ -656,6 +656,92 @@ atan2 -min -1
atan2 min_subnorm -1
atan2 -min_subnorm -1
atan2pi 0 1
atan2pi -0 1
atan2pi 0 0
atan2pi -0 0
atan2pi 0 -1
atan2pi -0 -1
atan2pi 0 -0
atan2pi -0 -0
atan2pi 1 0
atan2pi 1 -0
atan2pi -1 0
atan2pi -1 -0
atan2pi max max
atan2pi max -max
atan2pi -max max
atan2pi -max -max
atan2pi max min
atan2pi -max -min
atan2pi -max min
atan2pi max -min
atan2pi max min_subnorm
atan2pi -max -min_subnorm
atan2pi -max min_subnorm
atan2pi max -min_subnorm
atan2pi 0.75 1
atan2pi -0.75 1.0
atan2pi 0.75 -1.0
atan2pi -0.75 -1.0
atan2pi 0.390625 .00029
atan2pi 1.390625 0.9296875
atan2pi -0.00756827042671106339 -.001792735857538728036
atan2pi 0x1.00000000000001p0 0x1.00000000000001p0
atan2pi 0x4.c3841p-4 0x2.f2f308p+0
atan2pi -0xe.cf143p-40 0xd.3de7ap-36
atan2pi 0x5.576cf8p-4 0x2.21e65p+0
atan2pi -0x4.29411p-4 0x1.f4755cp+0
atan2pi -0xa.b4101p+20 -0xf.9c4c8p-4
atan2pi 0x4.251bb8p-4 0x7.40ac68p+0
atan2pi 0x1.47239ep+68 0xa.3ac3cp+68
atan2pi -0x6.b0794p-4 0x3.8ff10cp+0
atan2pi -0x7.15e7af0a1780cp-724 0xf.fffffp+124
atan2pi 0x3.f16f1p+0 -0x1.546056p+0
atan2pi -0x1.9e657cp-24 0x7.40bb4p-52
atan2pi -0x1.f9cf48p+49 0x1.f60598p+51
atan2pi 0x1.bcab29da0e947p-54 0x1.bc41f4d2294b8p-54
atan2pi 0x1.a11891ec004d4p-348 0x1.814830510be26p-348
atan2pi 0x1.b836ed678be29p-588 0x1.b7be6f5a03a8cp-588
atan2pi 0x1.a83f842ef3f73p-633 0x1.a799d8a6677ep-633
atan2pi 0x1.41df5aa214612c7e019fa6ade88p-13316 0x5.e53b26a270a29eb9f77ef8ef7af8p-13316
atan2pi min min
atan2pi min -min
atan2pi -min min
atan2pi -min -min
atan2pi min_subnorm min_subnorm
atan2pi min_subnorm -min_subnorm
atan2pi -min_subnorm min_subnorm
atan2pi -min_subnorm -min_subnorm
atan2pi min min_subnorm
atan2pi min -min_subnorm
atan2pi -min min_subnorm
atan2pi -min -min_subnorm
atan2pi min_subnorm min
atan2pi min_subnorm -min
atan2pi -min_subnorm min
atan2pi -min_subnorm -min
atan2pi 1 -max
atan2pi -1 -max
atan2pi min -max
atan2pi -min -max
atan2pi min_subnorm -max
atan2pi -min_subnorm -max
atan2pi 1 max
atan2pi -1 max
atan2pi min max
atan2pi -min max
atan2pi min_subnorm max
atan2pi -min_subnorm max
atan2pi min 1
atan2pi -min 1
atan2pi min_subnorm 1
atan2pi -min_subnorm 1
atan2pi min -1
atan2pi -min -1
atan2pi min_subnorm -1
atan2pi -min_subnorm -1
atanh 0
atanh -0
atanh 0.75

File diff suppressed because it is too large Load diff

View file

@ -72,6 +72,8 @@ __MATHCALL (acospi,, (_Mdouble_ __x));
__MATHCALL (asinpi,, (_Mdouble_ __x));
/* Arc tangent of X, divided by pi. */
__MATHCALL (atanpi,, (_Mdouble_ __x));
/* Arc tangent of Y/X, divided by pi. */
__MATHCALL (atan2pi,, (_Mdouble_ __y, _Mdouble_ __x));
/* Cosine of pi * X. */
__MATHCALL (cospi,, (_Mdouble_ __x));

View file

@ -538,6 +538,7 @@ static test_function test_functions[] =
FUNC_mpfr_f_f ("asinpi", mpfr_asinpi, false),
FUNC_mpfr_f_f ("atan", mpfr_atan, false),
FUNC_mpfr_ff_f ("atan2", mpfr_atan2, false),
FUNC_mpfr_ff_f ("atan2pi", mpfr_atan2pi, false),
FUNC_mpfr_f_f ("atanh", mpfr_atanh, false),
FUNC_mpfr_f_f ("atanpi", mpfr_atanpi, false),
FUNC_mpc_c_f ("cabs", mpc_abs, false),

View file

@ -744,6 +744,7 @@ class Tests(object):
# TS 18661-4 functions.
self.add_tests('acospi', 'r', ['r'])
self.add_tests('asinpi', 'r', ['r'])
self.add_tests('atan2pi', 'r', ['r', 'r'])
self.add_tests('atanpi', 'r', ['r'])
self.add_tests('cospi', 'r', ['r'])
self.add_tests('exp10', 'r', ['r'])

211
math/libm-test-atan2pi.inc Normal file
View file

@ -0,0 +1,211 @@
/* Test atan2pi.
Copyright (C) 2024 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include "libm-test-driver.c"
static const struct test_ff_f_data atan2pi_test_data[] =
{
/* atan2pi (y,inf) == +0 for finite y > 0 or +0. */
TEST_ff_f (atan2pi, 1, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_zero, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_value, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_subnorm_value, plus_infty, 0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, max_value, plus_infty, 0, ERRNO_UNCHANGED),
/* atan2pi (y,inf) == -0 for finite y < 0 or -0. */
TEST_ff_f (atan2pi, -1, plus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_zero, plus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_value, plus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_subnorm_value, plus_infty, minus_zero, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -max_value, plus_infty, minus_zero, ERRNO_UNCHANGED),
/* atan2pi(+inf, x) == 1/2 for finite x. */
TEST_ff_f (atan2pi, plus_infty, 1, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, plus_zero, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, min_value, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, min_subnorm_value, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, max_value, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, -1, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, minus_zero, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, -min_value, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, -min_subnorm_value, 0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, -max_value, 0.5, ERRNO_UNCHANGED),
/* atan2pi(-inf, x) == -1/2 for finite x. */
TEST_ff_f (atan2pi, minus_infty, 1, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, plus_zero, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, min_value, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, min_subnorm_value, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, max_value, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, -1, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, minus_zero, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, -min_value, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, -min_subnorm_value, -0.5, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, -max_value, -0.5, ERRNO_UNCHANGED),
/* atan2pi (y,-inf) == 1 for finite y > 0 or +0. */
TEST_ff_f (atan2pi, 1, minus_infty, 1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_zero, minus_infty, 1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_value, minus_infty, 1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_subnorm_value, minus_infty, 1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, max_value, minus_infty, 1.0, ERRNO_UNCHANGED),
/* atan2pi (y,-inf) == -1 for finite y < 0 or -0. */
TEST_ff_f (atan2pi, -1, minus_infty, -1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_zero, minus_infty, -1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_value, minus_infty, -1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_subnorm_value, minus_infty, -1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -max_value, minus_infty, -1.0, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, plus_infty, 0.25, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, plus_infty, -0.25, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, minus_infty, 0.75, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, minus_infty, -0.75, ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, snan_value, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -qnan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, qnan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, qnan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -qnan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -qnan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, plus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, min_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, -min_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, max_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, qnan_value, -max_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, plus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, minus_infty, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, plus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, min_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, -min_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, -min_subnorm_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, max_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -qnan_value, -max_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, snan_value, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, plus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, minus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, min_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -min_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, max_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, snan_value, -max_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, plus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, minus_infty, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, plus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, minus_zero, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -1, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, min_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -min_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -min_subnorm_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, max_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -snan_value, -max_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, plus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_zero, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_zero, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, 1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -1, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_subnorm_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_subnorm_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, max_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -max_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_infty, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_zero, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, minus_zero, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, 1, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -1, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, min_subnorm_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -min_subnorm_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, max_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, -max_value, -qnan_value, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_ff_f (atan2pi, plus_infty, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, minus_infty, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, plus_zero, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, minus_zero, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, 1, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -1, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, min_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -min_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, min_subnorm_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -min_subnorm_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, max_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -max_value, snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, plus_infty, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, minus_infty, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, plus_zero, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, minus_zero, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, 1, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -1, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, min_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -min_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, min_subnorm_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -min_subnorm_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, max_value, -snan_value, qnan_value, INVALID_EXCEPTION),
TEST_ff_f (atan2pi, -max_value, -snan_value, qnan_value, INVALID_EXCEPTION),
AUTO_TESTS_ff_f (atan2pi),
};
static void
atan2pi_test (void)
{
ALL_RM_TEST (atan2pi, 0, atan2pi_test_data, RUN_TEST_LOOP_ff_f, END);
}
static void
do_test (void)
{
atan2pi_test ();
}
/*
* Local Variables:
* mode:c
* End:
*/

41
math/s_atan2pi_template.c Normal file
View file

@ -0,0 +1,41 @@
/* Return arc tangent of Y/X, divided by pi.
Copyright (C) 2024 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <errno.h>
#include <math.h>
#include <math-narrow-eval.h>
#include <math_private.h>
#include <math-underflow.h>
FLOAT
M_DECL_FUNC (__atan2pi) (FLOAT y, FLOAT x)
{
FLOAT ret = math_narrow_eval (M_SUF (__ieee754_atan2) (y, x)
/ M_MLIT (M_PI));
if (__glibc_likely (!isnan (ret)))
math_check_force_underflow (ret);
if (ret == 0 && y != 0 && isfinite (x))
__set_errno (ERANGE);
/* Ensure that rounding away from zero for both atan2 and the
division cannot yield a return value from atan2pi with absolute
value greater than 1. */
return (isgreater (M_FABS (ret), M_LIT (1.0))
? M_COPYSIGN (M_LIT (1.0), ret)
: ret);
}
declare_mgen_alias (__atan2pi, atan2pi);

View file

@ -48,7 +48,7 @@ volatile int count_cdouble;
volatile int count_cfloat;
volatile int count_cldouble;
#define NCALLS 180
#define NCALLS 183
#define NCALLS_INT 4
#define NCCALLS 47
@ -244,6 +244,7 @@ F(compile_test) (void)
b = atanpi (atanpi (a));
b = atan (atan (a));
c = atan2 (atan2 (a, c), atan2 (b, x));
b = atan2pi (atan2pi (a, c), atan2pi (b, x));
a = cosh (cosh (x));
b = acosh (acosh (a));
a = sinh (sinh (x));
@ -368,6 +369,7 @@ F(compile_test) (void)
a = atan (y);
a = atanpi (y);
a = atan2 (y, y);
a = atan2pi (y, y);
a = cosh (y);
a = acosh (y);
a = sinh (y);
@ -575,6 +577,14 @@ TYPE
return x;
}
TYPE
(F(atan2pi)) (TYPE x, TYPE y)
{
++count;
P ();
return x + y;
}
TYPE
(F(cosh)) (TYPE x)
{

View file

@ -824,6 +824,8 @@
# define asinpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, asinpi)
/* Arc tangent of X, divided by pi. */
# define atanpi(Val) __TGMATH_UNARY_REAL_ONLY (Val, atanpi)
/* Arc tangent of Y/X, divided by pi. */
#define atan2pi(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, atan2pi)
/* Cosine of pi * X. */
# define cospi(Val) __TGMATH_UNARY_REAL_ONLY (Val, cospi)

View file

@ -159,6 +159,30 @@ float: 1
float128: 2
ldouble: 1
Function: "atan2pi":
double: 1
float: 1
float128: 2
ldouble: 1
Function: "atan2pi_downward":
double: 1
float: 1
float128: 2
ldouble: 2
Function: "atan2pi_towardzero":
double: 1
float: 1
float128: 2
ldouble: 2
Function: "atan2pi_upward":
double: 1
float: 1
float128: 2
ldouble: 2
Function: "atan_downward":
double: 1
float: 1

View file

@ -147,6 +147,7 @@ libm {
GLIBC_2.41 {
__acospiieee128;
__asinpiieee128;
__atan2piieee128;
__atanpiieee128;
__cospiieee128;
__sinpiieee128;

View file

@ -22,6 +22,7 @@ libnldbl-calls = \
asprintf_chk \
atan \
atan2 \
atan2pi \
atanh \
atanpi \
cabs \
@ -266,6 +267,7 @@ CFLAGS-nldbl-asinh.c = -fno-builtin-asinhl
CFLAGS-nldbl-asinpi.c = -fno-builtin-asinpil
CFLAGS-nldbl-atan.c = -fno-builtin-atanl
CFLAGS-nldbl-atan2.c = -fno-builtin-atan2l
CFLAGS-nldbl-atan2pi.c = -fno-builtin-atan2pil
CFLAGS-nldbl-atanh.c = -fno-builtin-atanhl
CFLAGS-nldbl-atanpi.c = -fno-builtin-atanpil
CFLAGS-nldbl-cabs.c = -fno-builtin-cabsl

View file

@ -0,0 +1,8 @@
#include "nldbl-compat.h"
double
attribute_hidden
atan2pil (double x, double y)
{
return atan2pi (x, y);
}

View file

@ -1237,6 +1237,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1094,6 +1094,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -44,6 +44,7 @@ CFLAGS-w_acosl_compat.c += -fno-builtin-fabsl
CFLAGS-s_acospil.c += -fno-builtin-fabsl
CFLAGS-w_asinl_compat.c += -fno-builtin-fabsl
CFLAGS-s_asinpil.c += -fno-builtin-fabsl
CFLAGS-s_atan2pil.c += -fno-builtin-fabsl
CFLAGS-w_atanhl_compat.c += -fno-builtin-fabsl
CFLAGS-s_atanpil.c += -fno-builtin-fabsl
CFLAGS-w_j0l_compat.c += -fno-builtin-fabsl

View file

@ -1205,6 +1205,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1364,6 +1364,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -799,6 +799,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -865,6 +865,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1244,6 +1244,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1084,6 +1084,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -926,6 +926,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1205,6 +1205,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -799,6 +799,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1037,6 +1037,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1036,6 +1036,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1030,6 +1030,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1368,6 +1368,7 @@ GLIBC_2.40 logp1f64x F
GLIBC_2.40 logp1l F
GLIBC_2.41 __acospiieee128 F
GLIBC_2.41 __asinpiieee128 F
GLIBC_2.41 __atan2piieee128 F
GLIBC_2.41 __atanpiieee128 F
GLIBC_2.41 __cospiieee128 F
GLIBC_2.41 __sinpiieee128 F
@ -1388,6 +1389,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1084,6 +1084,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1181,6 +1181,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1308,6 +1308,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1308,6 +1308,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -890,6 +890,12 @@ GLIBC_2.41 asinpif32 F
GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif32 F

View file

@ -1315,6 +1315,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1205,6 +1205,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1238,6 +1238,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -1238,6 +1238,14 @@ GLIBC_2.41 asinpif32x F
GLIBC_2.41 asinpif64 F
GLIBC_2.41 asinpif64x F
GLIBC_2.41 asinpil F
GLIBC_2.41 atan2pi F
GLIBC_2.41 atan2pif F
GLIBC_2.41 atan2pif128 F
GLIBC_2.41 atan2pif32 F
GLIBC_2.41 atan2pif32x F
GLIBC_2.41 atan2pif64 F
GLIBC_2.41 atan2pif64x F
GLIBC_2.41 atan2pil F
GLIBC_2.41 atanpi F
GLIBC_2.41 atanpif F
GLIBC_2.41 atanpif128 F

View file

@ -271,6 +271,30 @@ float: 2
Function: "atan2_vlen8_avx2":
float: 2
Function: "atan2pi":
double: 1
float: 1
float128: 2
ldouble: 1
Function: "atan2pi_downward":
double: 1
float: 3
float128: 2
ldouble: 2
Function: "atan2pi_towardzero":
double: 1
float: 2
float128: 2
ldouble: 2
Function: "atan2pi_upward":
double: 1
float: 3
float128: 2
ldouble: 2
Function: "atan_downward":
double: 1
float: 2