aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <josmyers@redhat.com>2024-12-10 20:42:20 +0000
committerJoseph Myers <josmyers@redhat.com>2024-12-10 20:42:20 +0000
commitf962932206eca2cfed0a26e72220ad3465bf9e65 (patch)
tree33f72059fe06461b8da5f234a70f8352822a4405
parenta9944a52c967ce76a5894c30d0274b824df43c7a (diff)
downloadglibc-f962932206eca2cfed0a26e72220ad3465bf9e65.tar.xz
glibc-f962932206eca2cfed0a26e72220ad3465bf9e65.zip
Implement C23 asinpi
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the asinpi functions (asin(x)/pi). Tested for x86_64 and x86, and with build-many-glibcs.py.
-rw-r--r--NEWS2
-rw-r--r--manual/math.texi17
-rw-r--r--math/Makefile6
-rw-r--r--math/Versions2
-rw-r--r--math/auto-libm-test-in51
-rw-r--r--math/auto-libm-test-out-asinpi2442
-rw-r--r--math/bits/mathcalls.h2
-rw-r--r--math/gen-auto-libm-tests.c1
-rwxr-xr-xmath/gen-tgmath-tests.py1
-rw-r--r--math/libm-test-asinpi.inc55
-rw-r--r--math/s_asinpi_template.c45
-rw-r--r--math/test-tgmath.c12
-rw-r--r--math/tgmath.h2
-rw-r--r--sysdeps/i386/i686/fpu/multiarch/libm-test-ulps24
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/Versions1
-rw-r--r--sysdeps/ieee754/ldbl-opt/Makefile2
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-asinpi.c8
-rw-r--r--sysdeps/mach/hurd/i386/libm.abilist8
-rw-r--r--sysdeps/mach/hurd/x86_64/libm.abilist8
-rw-r--r--sysdeps/powerpc/nofpu/Makefile1
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/arc/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/csky/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/i386/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/or1k/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist9
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libm.abilist6
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libm.abilist8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist8
-rw-r--r--sysdeps/x86_64/fpu/libm-test-ulps24
51 files changed, 2921 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index f18fdf0e2d..4d180a37d2 100644
--- a/NEWS
+++ b/NEWS
@@ -36,7 +36,7 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- - Trigonometric functions: acospi, cospi, sinpi, tanpi.
+ - Trigonometric functions: acospi, asinpi, 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
diff --git a/manual/math.texi b/manual/math.texi
index c815e6b547..32c5c057e0 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -442,6 +442,23 @@ Logarithms}.)
If both @var{x} and @var{y} are zero, @code{atan2} returns zero.
@end deftypefun
+@deftypefun double asinpi (double @var{x})
+@deftypefunx float asinpif (float @var{x})
+@deftypefunx {long double} asinpil (long double @var{x})
+@deftypefunx _FloatN asinpifN (_Float@var{N} @var{x})
+@deftypefunx _FloatNx asinpifNx (_Float@var{N}x @var{x})
+@standards{TS 18661-4:2015, math.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+These functions compute the arcsine of @var{x}, divided by pi. The
+result is in the interval between @code{-0.5} and @code{0.5} (inclusive).
+
+The arcsine function is defined mathematically only over the domain
+@code{-1} to @code{1}. If @var{x} is outside the domain,
+@code{asinpi} signals a domain error.
+
+The @code{asinpi} functions are from TS 18661-4:2015.
+@end deftypefun
+
@deftypefun double acospi (double @var{x})
@deftypefunx float acospif (float @var{x})
@deftypefunx {long double} acospil (long double @var{x})
diff --git a/math/Makefile b/math/Makefile
index 8209d14e37..87ff79b269 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -94,6 +94,7 @@ gen-libm-calls = \
k_casinhF \
k_casinhF \
s_acospiF \
+ s_asinpiF \
s_cacosF \
s_cacoshF \
s_canonicalizeF \
@@ -621,6 +622,7 @@ libm-test-funcs-auto = \
acospi \
asin \
asinh \
+ asinpi \
atan \
atan2 \
atanh \
@@ -930,6 +932,7 @@ tgmath3-macros = \
acospi \
asin \
asinh \
+ asinpi \
atan \
atan2 \
atanh \
@@ -1313,6 +1316,7 @@ CFLAGS-w_acosh.c += -fno-builtin-acoshl
CFLAGS-s_acospi.c += -fno-builtin-acospil
CFLAGS-w_asin.c += -fno-builtin-asinl
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-w_atanh.c += -fno-builtin-atanhl
@@ -1455,6 +1459,7 @@ CFLAGS-w_acosh.c += -fno-builtin-acoshf32x -fno-builtin-acoshf64
CFLAGS-s_acospi.c += -fno-builtin-acospif32x -fno-builtin-acospif64
CFLAGS-w_asin.c += -fno-builtin-asinf32x -fno-builtin-asinf64
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-w_atanh.c += -fno-builtin-atanhf32x -fno-builtin-atanhf64
@@ -1583,6 +1588,7 @@ CFLAGS-w_acoshf.c += -fno-builtin-acoshf32
CFLAGS-s_acospif.c += -fno-builtin-acospif32
CFLAGS-w_asinf.c += -fno-builtin-asinf32
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-w_atanhf.c += -fno-builtin-atanhf32
diff --git a/math/Versions b/math/Versions
index d59eb57a22..a7b79b0d6c 100644
--- a/math/Versions
+++ b/math/Versions
@@ -656,11 +656,13 @@ libm {
GLIBC_2.41 {
# Functions not involving _Float64x or _Float128, for all configurations.
acospi; acospif; acospil; acospif32; acospif64; acospif32x;
+ asinpi; asinpif; asinpil; asinpif32; asinpif64; asinpif32x;
cospi; cospif; cospil; cospif32; cospif64; cospif32x;
sinpi; sinpif; sinpil; sinpif32; sinpif64; sinpif32x;
tanpi; tanpif; tanpil; tanpif32; tanpif64; tanpif32x;
# Functions involving _Float64x or _Float128, for some configurations.
acospif64x; acospif128;
+ asinpif64x; asinpif128;
cospif64x; cospif128;
sinpif64x; sinpif128;
tanpif64x; tanpif128;
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 2abe9e5566..809df5ce09 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -464,6 +464,57 @@ asinh -min_subnorm
asinh max
asinh -max
+asinpi 0
+asinpi -0
+asinpi 0.5
+asinpi -0.5
+asinpi 1.0
+asinpi -1.0
+asinpi 0.75
+asinpi 0x0.ffffffp0
+asinpi -0x0.ffffffp0
+asinpi 0x0.ffffffff8p0
+asinpi -0x0.ffffffff8p0
+asinpi 0x0.ffffffffffffp0
+asinpi -0x0.ffffffffffffp0
+asinpi 0x0.fffffffffffff8p0
+asinpi -0x0.fffffffffffff8p0
+asinpi 0x0.ffffffffffffffffp0
+asinpi -0x0.ffffffffffffffffp0
+asinpi 0x0.ffffffffffffffffffffffffffcp0
+asinpi -0x0.ffffffffffffffffffffffffffcp0
+asinpi 0x0.ffffffffffffffffffffffffffff8p0
+asinpi -0x0.ffffffffffffffffffffffffffff8p0
+asinpi 0x1p-5
+asinpi 0x1p-10
+asinpi 0x1p-15
+asinpi 0x1p-20
+asinpi 0x1p-25
+asinpi 0x1p-30
+asinpi 0x1p-35
+asinpi 0x1p-40
+asinpi 0x1p-45
+asinpi 0x1p-50
+asinpi 0x1p-55
+asinpi 0x1p-60
+asinpi 0x1p-100
+asinpi 0x1p-600
+asinpi 0x1p-10000
+asinpi -0x2.18915cp-4
+asinpi -0x3.746774p-4
+asinpi -0x3.1c54d10e5c844p-4
+asinpi 0xf.c9675fa6fe69f12p-4
+asinpi -0xa.fc5afp-4
+asinpi 0xd.805e5p-4
+asinpi -0x2.1a02dcp-4
+asinpi -0x8.1c120ac3e495p-4
+asinpi -0xb.36dacp-4
+asinpi 0x1.f6041ffe89d7dp-4
+asinpi min
+asinpi -min
+asinpi min_subnorm
+asinpi -min_subnorm
+
atan 0
atan -0
atan max
diff --git a/math/auto-libm-test-out-asinpi b/math/auto-libm-test-out-asinpi
new file mode 100644
index 0000000000..bf02b297f9
--- /dev/null
+++ b/math/auto-libm-test-out-asinpi
@@ -0,0 +1,2442 @@
+asinpi 0
+= asinpi downward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi downward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi downward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi downward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi downward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi downward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi tonearest ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi towardzero ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= asinpi upward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+asinpi -0
+= asinpi downward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi downward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi downward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi downward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi downward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi downward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi tonearest ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi towardzero ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= asinpi upward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+asinpi 0.5
+= asinpi downward binary32 0x8p-4 : 0x2.aaaaa8p-4 : inexact-ok
+= asinpi tonearest binary32 0x8p-4 : 0x2.aaaaacp-4 : inexact-ok
+= asinpi towardzero binary32 0x8p-4 : 0x2.aaaaa8p-4 : inexact-ok
+= asinpi upward binary32 0x8p-4 : 0x2.aaaaacp-4 : inexact-ok
+= asinpi downward binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi tonearest binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi towardzero binary64 0x8p-4 : 0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi upward binary64 0x8p-4 : 0x2.aaaaaaaaaaaacp-4 : inexact-ok
+= asinpi downward intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok
+= asinpi tonearest intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok
+= asinpi towardzero intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok
+= asinpi upward intel96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok
+= asinpi downward m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok
+= asinpi tonearest m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok
+= asinpi towardzero m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaa8p-4 : inexact-ok
+= asinpi upward m68k96 0x8p-4 : 0x2.aaaaaaaaaaaaaaacp-4 : inexact-ok
+= asinpi downward binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok
+= asinpi tonearest binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok
+= asinpi towardzero binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok
+= asinpi upward binary128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaaacp-4 : inexact-ok
+= asinpi downward ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok
+= asinpi tonearest ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaabp-4 : inexact-ok
+= asinpi towardzero ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaaap-4 : inexact-ok
+= asinpi upward ibm128 0x8p-4 : 0x2.aaaaaaaaaaaaaaaaaaaaaaaaabp-4 : inexact-ok
+asinpi -0.5
+= asinpi downward binary32 -0x8p-4 : -0x2.aaaaacp-4 : inexact-ok
+= asinpi tonearest binary32 -0x8p-4 : -0x2.aaaaacp-4 : inexact-ok
+= asinpi towardzero binary32 -0x8p-4 : -0x2.aaaaa8p-4 : inexact-ok
+= asinpi upward binary32 -0x8p-4 : -0x2.aaaaa8p-4 : inexact-ok
+= asinpi downward binary64 -0x8p-4 : -0x2.aaaaaaaaaaaacp-4 : inexact-ok
+= asinpi tonearest binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi towardzero binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi upward binary64 -0x8p-4 : -0x2.aaaaaaaaaaaaap-4 : inexact-ok
+= asinpi downward intel96 -0x8p-4 : -0x2.aaaaaaaaaaaaaaacp-4 : inexact