summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2014-02-07 21:04:10 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2014-02-07 21:04:10 +0000
commit85f4cc52a11508e42daa5625283410e0d6f3a993 (patch)
treedeca25a1076f1a24479cbca3bd7d162123fae742
parenta1055d384d75c28f09a47c2d8628bc330f892955 (diff)
Merge changes between r25087 and r25236 from /fsf/trunk.HEADtrunkmaster
git-svn-id: svn://svn.eglibc.org/trunk@25237 7b3dc134-2b1b-0410-93df-9e9f96275f8d
-rw-r--r--libc/ChangeLog336
-rw-r--r--libc/Makerules32
-rw-r--r--libc/NEWS38
-rw-r--r--libc/csu/libc-tls.c27
-rw-r--r--libc/elf/Versions1
-rw-r--r--libc/elf/dl-close.c10
-rw-r--r--libc/elf/dl-iteratephdr.c30
-rw-r--r--libc/elf/dl-load.c14
-rw-r--r--libc/elf/dl-misc.c142
-rw-r--r--libc/elf/dl-open.c5
-rw-r--r--libc/elf/dl-reloc.c48
-rw-r--r--libc/elf/dl-support.c3
-rw-r--r--libc/elf/dl-tls.c144
-rw-r--r--libc/include/features.h2
-rw-r--r--libc/inet/netinet/in.h2
-rw-r--r--libc/libio/Makefile2
-rw-r--r--libc/libio/tst-ftell-partial-wide.c107
-rw-r--r--libc/libio/wfileops.c11
-rw-r--r--libc/manual/Makefile3
-rw-r--r--libc/manual/argp.texi182
-rw-r--r--libc/manual/arith.texi149
-rw-r--r--libc/manual/charset.texi94
-rw-r--r--libc/manual/check-safety.sh119
-rw-r--r--libc/manual/conf.texi19
-rw-r--r--libc/manual/contrib.texi36
-rw-r--r--libc/manual/crypt.texi30
-rw-r--r--libc/manual/ctype.texi73
-rw-r--r--libc/manual/debug.texi26
-rw-r--r--libc/manual/errno.texi43
-rw-r--r--libc/manual/filesys.texi222
-rw-r--r--libc/manual/getopt.texi26
-rw-r--r--libc/manual/intro.texi727
-rw-r--r--libc/manual/job.texi25
-rw-r--r--libc/manual/lang.texi17
-rw-r--r--libc/manual/libdl.texi10
-rw-r--r--libc/manual/llio.texi280
-rw-r--r--libc/manual/locale.texi146
-rw-r--r--libc/manual/macros.texi213
-rw-r--r--libc/manual/math.texi103
-rw-r--r--libc/manual/memory.texi533
-rw-r--r--libc/manual/message.texi159
-rw-r--r--libc/manual/pattern.texi727
-rw-r--r--libc/manual/pipe.texi110
-rw-r--r--libc/manual/platform.texi18
-rw-r--r--libc/manual/process.texi72
-rw-r--r--libc/manual/resource.texi84
-rw-r--r--libc/manual/search.texi72
-rw-r--r--libc/manual/setjmp.texi44
-rw-r--r--libc/manual/signal.texi128
-rw-r--r--libc/manual/socket.texi569
-rw-r--r--libc/manual/startup.texi83
-rw-r--r--libc/manual/stdio.texi249
-rw-r--r--libc/manual/string.texi153
-rw-r--r--libc/manual/sysinfo.texi92
-rw-r--r--libc/manual/syslog.texi57
-rw-r--r--libc/manual/terminal.texi174
-rw-r--r--libc/manual/threads.texi172
-rw-r--r--libc/manual/time.texi369
-rw-r--r--libc/manual/users.texi794
-rwxr-xr-xlibc/math/gen-libm-test.pl5
-rw-r--r--libc/nptl/ChangeLog19
-rw-r--r--libc/nptl/Makefile12
-rw-r--r--libc/nptl/allocatestack.c19
-rw-r--r--libc/nptl/shlib-versions2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c14
-rw-r--r--libc/nptl/tst-tls7.c143
-rw-r--r--libc/nptl/tst-tls7mod.c40
-rw-r--r--libc/nscd/netgroupcache.c18
-rw-r--r--libc/nss/nss_files/files-netgrp.c3
-rw-r--r--libc/po/fr.po988
-rw-r--r--libc/po/sl.po1163
-rw-r--r--libc/ports/ChangeLog.aarch644
-rw-r--r--libc/ports/ChangeLog.alpha7
-rw-r--r--libc/ports/ChangeLog.arm6
-rw-r--r--libc/ports/ChangeLog.hppa4
-rw-r--r--libc/ports/ChangeLog.ia645
-rw-r--r--libc/ports/ChangeLog.m68k4
-rw-r--r--libc/ports/ChangeLog.microblaze10
-rw-r--r--libc/ports/ChangeLog.tile4
-rw-r--r--libc/ports/sysdeps/aarch64/libm-test-ulps15
-rw-r--r--libc/ports/sysdeps/alpha/fpu/libm-test-ulps11013
-rw-r--r--libc/ports/sysdeps/alpha/tls-macros.h22
-rw-r--r--libc/ports/sysdeps/hppa/fpu/libm-test-ulps4486
-rw-r--r--libc/ports/sysdeps/m68k/m680x0/fpu/libm-test-ulps5567
-rw-r--r--libc/ports/sysdeps/microblaze/fegetround.c25
-rw-r--r--libc/ports/sysdeps/microblaze/fesetround.c25
-rw-r--r--libc/ports/sysdeps/microblaze/libm-test-ulps4448
-rw-r--r--libc/ports/sysdeps/microblaze/libm-test-ulps_new3032
-rw-r--r--libc/ports/sysdeps/tile/libm-test-ulps2014
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/arm/clone.S8
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/ia64/setjmp.S66
-rw-r--r--libc/shlib-versions2
-rw-r--r--libc/sysdeps/generic/ldsodefs.h16
-rw-r--r--libc/sysdeps/mach/hurd/dl-sysdep.h7
-rw-r--r--libc/sysdeps/powerpc/Makefile4
-rw-r--r--libc/sysdeps/sh/fpu_control.h (renamed from libc/sysdeps/sh/sh4/fpu/fpu_control.h)14
-rw-r--r--libc/sysdeps/sh/libm-test-ulps6193
-rw-r--r--libc/sysdeps/sh/sh4/Makefile3
-rw-r--r--libc/sysdeps/sh/sh4/fpu/libm-test-ulps1094
-rw-r--r--libc/sysdeps/sh/sys/ucontext.h98
-rw-r--r--libc/sysdeps/sparc/fpu/libm-test-ulps11021
-rw-r--r--libc/sysdeps/unix/sysv/linux/dl-sysdep.c46
-rw-r--r--libc/sysdeps/unix/sysv/linux/dl-sysdep.h4
-rw-r--r--libc/sysdeps/unix/sysv/linux/kernel-features.h6
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist11
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist3
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist6
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist2171
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist9
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist11
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist407
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist123
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist228
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist93
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist37
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist42
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist8
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h96
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/sys/ucontext.h (renamed from libc/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h)8
-rw-r--r--libc/sysdeps/unix/sysv/linux/sh/sh3/sys/ucontext.h101
-rw-r--r--libc/sysdeps/unix/sysv/linux/sh/sys/ucontext.h (renamed from libc/sysdeps/unix/sysv/linux/sh/sh4/sys/ucontext.h)19
-rw-r--r--libc/sysdeps/x86/fpu/bits/mathinline.h4
-rw-r--r--libc/sysdeps/x86_64/fpu/libm-test-ulps777
-rw-r--r--libc/version.h4
124 files changed, 52764 insertions, 11249 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog
index a8e289ebb..81c393aa0 100644
--- a/libc/ChangeLog
+++ b/libc/ChangeLog
@@ -1,3 +1,291 @@
+2014-02-06 Carlos O'Donell <carlos@redhat.com>
+
+ [BZ #16529]
+ * inet/netinet/in.h: Remove comma after IPPROTO_MH.
+
+2014-02-06 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ * manual/contrib.texi: Update entry for Carlos O'Donell,
+ Joseph Myers, Roland McGrath, Alexandre Oliva and Ryan Arnold.
+
+2014-02-05 Carlos O'Donell <carlos@rehdat.com>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h: Fix comment.
+
+ * sysdeps/unix/sysv/linux/kernel-features.h
+ [__LINUX_KERNEL_VERSION >= 0x020621]
+ (__ASSUME_PROC_PID_TASK_COMM): Define.
+
+2014-02-05 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ * manual/contrib.texi: Update entry for Ondrej Bilka, Will
+ Newton and Alexandre Oliva. Add entries for Steve Ellcey, Chris
+ Leonard and Allan McRae.
+
+2014-02-04 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Update for some 64-bit differences from
+ 32-bit.
+
+2014-02-04 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist: New
+ file
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist:
+ New file
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist: New
+ file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist: New
+ file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist: New
+ file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist: New
+ file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist:
+ New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist:
+ New file.
+
+2014-02-01 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+
+ * nptl/shlib-versions: Change powerpc*le start to 2.17.
+ * shlib-versions: Likewise.
+
+2014-02-04 Roland McGrath <roland@hack.frob.com>
+ Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+
+ * sysdeps/powerpc/Makefile [$(config-machine) ends with 'le']
+ (abilist-pattern): New variable, set to %-le.abilist.
+
+ * Makerules (abilist-pattern): New variable.
+ (vpath): Use $(abilist-pattern) in place of %.abilist.
+ (check-abi-% pattern rule): Likewise.
+ (check-abi, update-abi): Likewise.
+
+2014-02-04 Eric Wong <normalperson@yhbt.net>
+
+ * sysdeps/x86_64/fpu/libm-test-ulps: Update.
+
+2014-02-04 Eric Wong <normalperson@yhbt.net>
+
+ * sysdeps/x86_64/fpu/libm-test-ulps: Update.
+
+2014-02-03 Carlos O'Donell <carlos@redhat.com>
+
+ * manual/startup.texi: Add next, previous, and top entries for
+ the `Program Arguments' and `Environment Variables' nodes.
+
+2014-02-03 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/macros.texi: Add comments before MTASC-safety macros.
+
+ * manual/users.texi: Document MTASC-safety properties.
+
+ * manual/threads.texi (pthread_key_create, pthread_key_delete,
+ pthread_getspecific, pthread_setspecific): Format with
+ @deftypefun, and add @safety note.
+ * manual/signal.texi: Move comments that analyze the above
+ functions to their home place.
+
+2014-02-03 Allan McRae <allan@archlinux.org>
+
+ * po/sl.po: Update Slovenian translation from translation project.
+
+2014-02-02 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/time.texi (timegm): Add missing blank after @c.
+ Reported by Joseph Myers <joseph@codesourcery.com>.
+
+2014-02-01 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/check-safety.sh: New.
+ * manual/Makefile ($(objpfx)stamp-summary): Run it.
+
+ * manual/terminal.texi: Document MTASC-safety properties.
+
+ * manual/filesys.texi: Document MTASC-safety properties.
+
+ * manual/errno.texi: Document MTASC-safety properties.
+
+ * manual/intro.texi: Document safety identifiers and
+ conditionals.
+
+ * manual/string.texi (wcstok): Fix prototype.
+ (wcstok, strtok, strtok_r): Adjust reentrancy remarks.
+
+ * manual/time.texi: Document MTASC-safety properties.
+
+ * manual/string.texi: Document MTASC-safety properties.
+
+ * manual/threads.texi: Document MTASC-safety properties.
+
+ * manual/stdio.texi: Document MTASC-safety properties.
+
+ * manual/syslog.texi: Document MTASC-safety properties.
+
+ * manual/sysinfo.texi: Document MTASC-safety properties.
+
+ * manual/startup.texi: Document MTASC-safety properties.
+
+ * manual/socket.texi: Document MTASC-safety properties.
+
+ * manual/signal.texi: Document MTASC-safety properties.
+
+2014-01-31 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/setjmp.texi: Document MTASC-safety properties.
+
+ * manual/search.texi: Document MTASC-safety properties.
+
+ * manual/resource.texi: Document MTASC-safety properties.
+
+ * manual/process.texi: Document MTASC-safety properties.
+
+ * manual/platform.texi: Document MTASC-safety properties.
+
+ * manual/pipe.texi: Document MTASC-safety properties.
+
+ * manual/pattern.texi: Document MTASC-safety properties.
+
+ * manual/message.texi: Document MTASC-safety properties.
+
+ [BZ #12751]
+ * manual/memory.texi: Document MTASC-safety properties.
+
+ * manual/math.texi: Document MTASC-safety properties.
+
+ * manual/locale.texi: Document MTASC-safety properties.
+
+ * manual/llio.texi: Document MTASC-safety properties.
+
+ * manual/libdl.texi: New.
+
+ * manual/lang.texi: Document MTASC-safety properties.
+
+ * manual/job.texi: Document MTASC-safety properties.
+
+ * manual/getopt.texi: Document MTASC-safety properties.
+
+ * manual/ctype.texi: Document MTASC-safety properties.
+
+2014-01-31 Maciej W. Rozycki <macro@codesourcery.com>
+
+ [BZ #16046]
+ * csu/libc-tls.c (static_map): Remove variable.
+ (__libc_setup_tls): Use main executable's link map for TLS data.
+ * elf/dl-close.c (_dl_close_worker) [!SHARED]: Remove special
+ casing for LM_ID_BASE and GL(dl_nns).
+ * elf/dl-iteratephdr.c [!SHARED] (dl_iterate_phdr): Remove
+ function. Alias dl_iterate_phdr to __dl_iterate_phdr.
+ * elf/dl-load.c (_dl_map_object) [!SHARED]: Remove special
+ casing for GL(dl_ns)[LM_ID_BASE]._ns_loaded.
+ * elf/dl-support.c (_dl_main_map): Also initialize l_flags_1
+ member.
+ (_dl_non_dynamic_init): Also initialize _dl_main_map's l_phdr and
+ l_phnum members.
+
+2014-01-30 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/debug.texi: Document MTASC-safety properties.
+
+2014-01-29 H.J. Lu <hongjiu.lu@intel.com>
+
+ [BZ #16510]
+ * sysdeps/x86/fpu/bits/mathinline.h: Check __SSE2_MATH__ instead
+ of __x86_64__ when disabling x87 inline functions.
+
+2014-01-29 Alexandre Oliva <aoliva@redhat.com>
+
+ * manual/charset.texi: Document MTASC-safety properties.
+
+ * manual/crypt.texi: Document MTASC-safety properties.
+
+ * manual/conf.texi: Document MTASC-safety properties.
+
+ * manual/arith.texi: Document MTASC-safety properties.
+
+ * manual/argp.texi: Document MTASC-safety properties.
+
+ * manual/macros.texi: Introduce macros to document multi
+ thread, asynchronous signal and asynchronous cancellation
+ safety properties.
+ * manual/intro.texi: Introduce the properties themselves.
+
+2014-01-27 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * sysdeps/sh/sh4/Makefile: New file.
+
+2014-01-27 Andreas Schwab <schwab@linux-m68k.org>
+
+ * math/gen-libm-test.pl ($srcdir): New variable.
+ ($auto_input): Use it.
+
+2014-01-27 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ [BZ #16506]
+ * nss/nss_files/files-netgrp.c (_nss_files_setnetgrent): Avoid
+ access beyond array bounds when parsing netgroups file.
+
+ * nscd/netgroupcache.c (addgetnetgrentX): Compute offset from
+ the old buffer before realloc.
+
+2014-01-27 Allan McRae <allan@archlinux.org>
+
+ * po/fr.po: Update French translation from translation project.
+
+2014-01-26 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * sysdeps/sh/libm-test-ulps: Regenerate.
+
+2014-01-24 David S. Miller <davem@davemloft.net>
+
+ * sysdeps/sparc/fpu/libm-test-ulps: Regenerate.
+
+2014-01-25 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * sysdeps/sh/sh4/fpu/libm-test-ulps: Move to ...
+ * sysdeps/sh/libm-test-ulps: ... here and regenerated.
+
+2013-01-24 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ [BZ #16474]
+ * nscd/netgroupcache.c (addgetnetgrentX): Adjust triplet
+ string pointers after reallocation.
+
+2014-01-24 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Use __SH4__ and
+ __SH4A__ instead of __SH_FPU_ANY__.
+
+2014-01-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
+
+ * sysdeps/sh/fpu_control.h: New file.
+ * sysdeps/sh/sh4/fpu/fpu_control.h: Remove.
+ * sysdeps/unix/sysv/linux/sh/sys/ucontext.h: New file.
+ * sysdeps/unix/sysv/linux/sh/sh3/sys/ucontext.h: Remove.
+ * sysdeps/unix/sysv/linux/sh/sh3/sys: Remove directory.
+ * sysdeps/unix/sysv/linux/sh/sh4/sys/ucontext.h: Remove.
+ * sysdeps/unix/sysv/linux/sh/sh4/sys: Remove directory.
+ * sysdeps/sh/sys/ucontext.h: Remove.
+ * sysdeps/sh/sys: Remove directory.
+
+2014-01-22 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Merge into
+ s390/sys/ucontext.h.
+ * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/sys/ucontext.h: New file.
+
2014-01-20 H.J. Lu <hongjiu.lu@intel.com>
[BZ #15605]
@@ -288,15 +576,6 @@
* sysdeps/powerpc/powerpc64/multiarch/strnlen-power7.S: Likewise.
* sysdeps/powerpc/powerpc64/multiarch/wcscpy.c: Likewise.
-2014-01-03 Andrew Hunter <ahh@google.com>
-
- * elf/dl-open.c (dl_open_worker): New comment.
- * elf/dl-reloc.c (_dl_try_allocate_static_tls): Use
- atomic_compare_and_exchange_bool_acq
- (_dl_allocate_static_tls): Block signals.
- * elf/dl-tls.c (allocate_and_init): Return void.
- (_dl_update_slotinfo): Block signals, use atomic update.
-
2014-01-03 Joseph Myers <joseph@codesourcery.com>
* sysdeps/powerpc/nofpu/libm-test-ulps: Regenerated.
@@ -697,12 +976,6 @@
* sysdeps/powerpc/fpu/libm-test-ulps: Update.
-2013-12-19 Paul Pluzhnikov <ppluzhnikov@google.com>
-
- * elf/dl-misc.c (ptr_to_signal_safe_allocator_header): New function.
- (__signal_safe_memalign, __signal_safe_free): Use it.
- (__signal_safe_realloc): Likewise.
-
2013-12-19 Joseph Myers <joseph@codesourcery.com>
* manual/texinfo.tex: Update to version 2013-11-26.10 with
@@ -786,37 +1059,6 @@
* manual/install.texi: Suppress menu for plain text output.
* INSTALL: Regenerated.
-2013-12-18 Andrew Hunter <ahh@google.com>
-
- * sysdeps/generic/ldsodefs.h (__signal_safe_memalign): New prototype.
- (__signal_safe_malloc, __signal_safe_free): Likewise.
- (__signal_safe_realloc, __signal_safe_calloc): Likewise.
- * elf/dl-misc.c (__signal_safe_allocator_header): New struct.
- (__signal_safe_memalign, __signal_safe_malloc): New function.
- (__signal_safe_free, __signal_safe_realloc): Likewise.
- (__signal_safe_calloc): Likewise.
- * elf/dl-tls.c (allocate_dtv, _dl_clear_dtv): Call signal-safe
- functions.
- (_dl_deallocate_tls, _dl_update_slotinfo): Likewise.
-
-2013-12-18 Andrew Hunter <ahh@google.com>
-
- * elf/Versions (ld): Add _dl_clear_dtv.
- * sysdeps/generic/ldsodefs.h (_dl_clear_dtv): New prototype.
- * elf/dl-tls.c (_dl_clear_dtv): New function.
- * nptl/allocatestack.c (get_cached_stack): Call _dl_clear_dtv.
-
-2013-12-18 Andrew Hunter <ahh@google.com>
-
- * sysdeps/generic/ldsodefs.h (_dl_mask_all_signals): New prototype.
- (_dl_unmask_signals): Likewise.
- * sysdeps/mach/hurd/dl-sysdep.h (_dl_mask_all_signals): New stub.
- (_dl_unmask_all_signals): Likewise.
- * sysdeps/unix/sysv/linux/dl-sysdep.h (_dl_mask_all_signals): New prototype.
- (_dl_unmask_all_signals): Likewise.
- * sysdeps/unix/sysv/linux/dl-sysdep.c (_dl_mask_all_signals): New function.
- (_dl_unmask_signals): Likewise.
-
2013-12-18 Brooks Moses <bmoses@google.com>
[BZ #15846]
@@ -889,6 +1131,7 @@
2013-12-17 Paul Eggert <eggert@cs.ucla.edu>
+ [BZ #15968]
Support TZ transition times < 00:00:00.
This is needed for version-3 tz-format files; it supports time
stamps past 2037 for America/Godthab (the only entry in the tz
@@ -3640,6 +3883,7 @@
2013-11-04 Joseph Myers <joseph@codesourcery.com>
+ [BZ #6981]
* include/stdc-predef.h [__GCC_IEC_559] (__STDC_IEC_559__): Define
depending on [__GCC_IEC_559 > 0].
[__GCC_IEC_559_COMPLEX] (__STDC_IEC_559_COMPLEX__): Define
diff --git a/libc/Makerules b/libc/Makerules
index 2899d94ec..6143432a9 100644
--- a/libc/Makerules
+++ b/libc/Makerules
@@ -1232,6 +1232,14 @@ ifeq ($(build-shared),yes)
LC_ALL=C $(OBJDUMP) --dynamic-syms $< > $@T
mv -f $@T $@
+# A sysdeps/.../Makefile can set abilist-pattern to something like
+# %-foo.abilist to look for libc-foo.abilist instead of libc.abilist.
+# This makes sense if multiple ABIs can be most cleanly supported by a
+# configuration without using separate sysdeps directories for each.
+ifdef abilist-pattern
+vpath $(abilist-pattern) $(+sysdep_dirs)
+endif
+
vpath %.abilist $(+sysdep_dirs)
# The .PRECIOUS rule prevents the files built by an implicit rule whose
@@ -1241,18 +1249,42 @@ vpath %.abilist $(+sysdep_dirs)
.PRECIOUS: %.symlist
generated += $(extra-libs:=.symlist)
+ifdef abilist-pattern
+check-abi-%: $(common-objpfx)config.make $(abilist-pattern) $(objpfx)%.symlist
+ $(check-abi-pattern)
+check-abi-%: $(common-objpfx)config.make $(abilist-pattern) \
+ $(common-objpfx)%.symlist
+ $(check-abi-pattern)
+endif
check-abi-%: $(common-objpfx)config.make %.abilist $(objpfx)%.symlist
$(check-abi)
check-abi-%: $(common-objpfx)config.make %.abilist $(common-objpfx)%.symlist
$(check-abi)
+define check-abi-pattern
+ diff -p -U 0 $(filter $(abilist-pattern),$^) $(filter %.symlist,$^)
+endef
define check-abi
diff -p -U 0 $(filter %.abilist,$^) $(filter %.symlist,$^)
endef
+ifdef abilist-pattern
+update-abi-%: $(objpfx)%.symlist $(abilist-pattern)
+ $(update-abi-pattern)
+update-abi-%: $(common-objpfx)%.symlist $(abilist-pattern)
+ $(update-abi-pattern)
+endif
update-abi-%: $(objpfx)%.symlist %.abilist
$(update-abi)
update-abi-%: $(common-objpfx)%.symlist %.abilist
$(update-abi)
+define update-abi-pattern
+@if cmp -s $^ 2> /dev/null; \
+ then \
+ echo '+++ $(filter $(abilist-pattern),$^) is unchanged'; \
+ else cp -f $^; \
+ echo '*** Now check $(filter $(abilist-pattern),$^) changes for correctness ***'; \
+ fi
+endef
define update-abi
@if cmp -s $^ 2> /dev/null; \
then \
diff --git a/libc/NEWS b/libc/NEWS
index f4f22a8f3..98b479e94 100644
--- a/libc/NEWS
+++ b/libc/NEWS
@@ -9,23 +9,24 @@ Version 2.19
* The following bugs are resolved with this release:
- 156, 387, 431, 762, 832, 926, 2801, 4772, 6786, 6787, 6807, 6810, 7003,
- 9721, 9954, 10253, 10278, 11087, 11157, 11214, 12100, 12486, 12986,
- 13028, 13982, 13985, 14029, 14032, 14120, 14143, 14155, 14286, 14547,
- 14699, 14752, 14782, 14876, 14910, 15004, 15048, 15073, 15089, 15128,
- 15218, 15268, 15277, 15308, 15362, 15374, 15400, 15425, 15427, 15483,
- 15522, 15531, 15532, 15593, 15601, 15608, 15609, 15610, 15632, 15640,
- 15670, 15672, 15680, 15681, 15723, 15734, 15735, 15736, 15748, 15749,
- 15754, 15760, 15763, 15764, 15797, 15799, 15825, 15843, 15844, 15846,
- 15847, 15849, 15850, 15855, 15856, 15857, 15859, 15867, 15886, 15887,
- 15890, 15892, 15893, 15895, 15897, 15901, 15905, 15909, 15915, 15917,
- 15919, 15921, 15923, 15939, 15941, 15948, 15963, 15966, 15985, 15988,
- 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16055, 16071, 16072,
- 16074, 16077, 16078, 16103, 16112, 16133, 16143, 16144, 16146, 16150,
- 16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245, 16271, 16274,
- 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338, 16356, 16365,
- 16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386, 16387, 16390,
- 16394, 16400, 16407, 16408, 16414, 16430, 16431, 16453.
+ 156, 387, 431, 762, 832, 926, 2801, 4772, 6786, 6787, 6807, 6810, 6981,
+ 7003, 9721, 9954, 10253, 10278, 11087, 11157, 11214, 12100, 12486, 12751,
+ 12986, 13028, 13982, 13985, 14029, 14032, 14120, 14143, 14155, 14286,
+ 14547, 14699, 14752, 14782, 14876, 14910, 15004, 15048, 15073, 15089,
+ 15128, 15218, 15268, 15277, 15308, 15362, 15374, 15400, 15425, 15427,
+ 15483, 15522, 15531, 15532, 15593, 15601, 15608, 15609, 15610, 15632,
+ 15640, 15670, 15672, 15680, 15681, 15723, 15734, 15735, 15736, 15748,
+ 15749, 15754, 15760, 15763, 15764, 15797, 15799, 15825, 15843, 15844,
+ 15846, 15847, 15849, 15850, 15855, 15856, 15857, 15859, 15867, 15886,
+ 15887, 15890, 15892, 15893, 15895, 15897, 15901, 15905, 15909, 15915,
+ 15917, 15919, 15921, 15923, 15939, 15941, 15948, 15963, 15966, 15968,
+ 15985, 15988, 15997, 16032, 16034, 16036, 16037, 16038, 16041, 16046,
+ 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144,
+ 16146, 16150, 16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245,
+ 16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338,
+ 16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386,
+ 16387, 16390, 16394, 16398, 16400, 16407, 16408, 16414, 16430, 16431,
+ 16453, 16474, 16506, 16510, 16529
* Slovenian translations for glibc messages have been contributed by the
Translation Project's Slovenian team of translators.
@@ -118,6 +119,9 @@ Version 2.19
* The _BSD_SOURCE feature test macro no longer enables BSD interfaces that
conflict with POSIX. The libbsd-compat library (which was a dummy library
that did nothing) has also been removed.
+
+* Preliminary documentation about Multi-Thread, Async-Signal and
+ Async-Cancel Safety has been added.
Version 2.18
diff --git a/libc/csu/libc-tls.c b/libc/csu/libc-tls.c
index 5aec47d54..c18b888b3 100644
--- a/libc/csu/libc-tls.c
+++ b/libc/csu/libc-tls.c
@@ -42,9 +42,6 @@ static struct
struct dtv_slotinfo info[2 + TLS_SLOTINFO_SURPLUS];
} static_slotinfo;
-/* Fake link map for the application. */
-static struct link_map static_map;
-
/* Highest dtv index currently needed. */
size_t _dl_tls_max_dtv_idx;
@@ -162,14 +159,16 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
_dl_static_dtv[0].counter = (sizeof (_dl_static_dtv) / sizeof (_dl_static_dtv[0])) - 2;
// _dl_static_dtv[1].counter = 0; would be needed if not already done
+ struct link_map *main_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
+
/* Initialize the TLS block. */
#if TLS_TCB_AT_TP
_dl_static_dtv[2].pointer.val = ((char *) tlsblock + tcb_offset
- roundup (memsz, align ?: 1));
- static_map.l_tls_offset = roundup (memsz, align ?: 1);
+ main_map->l_tls_offset = roundup (memsz, align ?: 1);
#elif TLS_DTV_AT_TP
_dl_static_dtv[2].pointer.val = (char *) tlsblock + tcb_offset;
- static_map.l_tls_offset = tcb_offset;
+ main_map->l_tls_offset = tcb_offset;
#else
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
#endif
@@ -193,19 +192,17 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
if (__builtin_expect (lossage != NULL, 0))
__libc_fatal (lossage);
- /* We have to create a fake link map which normally would be created
- by the dynamic linker. It just has to have enough information to
- make the TLS routines happy. */
- static_map.l_tls_align = align;
- static_map.l_tls_blocksize = memsz;
- static_map.l_tls_initimage = initimage;
- static_map.l_tls_initimage_size = filesz;
- static_map.l_type = lt_executable;
- static_map.l_tls_modid = 1;
+ /* Update the executable's link map with enough information to make
+ the TLS routines happy. */
+ main_map->l_tls_align = align;
+ main_map->l_tls_blocksize = memsz;
+ main_map->l_tls_initimage = initimage;
+ main_map->l_tls_initimage_size = filesz;
+ main_map->l_tls_modid = 1;
init_slotinfo ();
// static_slotinfo.si.slotinfo[1].gen = 0; already zero
- static_slotinfo.si.slotinfo[1].map = &static_map;
+ static_slotinfo.si.slotinfo[1].map = main_map;
memsz = roundup (memsz, align ?: 1);
diff --git a/libc/elf/Versions b/libc/elf/Versions
index 01b7a59d5..238399232 100644
--- a/libc/elf/Versions
+++ b/libc/elf/Versions
@@ -53,7 +53,6 @@ ld {
_dl_allocate_tls; _dl_allocate_tls_init;
_dl_argv; _dl_find_dso_for_object; _dl_get_tls_static_info;
_dl_deallocate_tls; _dl_make_stack_executable; _dl_out_of_memory;
- _dl_clear_dtv;
_dl_rtld_di_serinfo; _dl_starting_up; _dl_tls_setup;
_rtld_global; _rtld_global_ro;
diff --git a/libc/elf/dl-close.c b/libc/elf/dl-close.c
index 406d3ba91..412497902 100644
--- a/libc/elf/dl-close.c
+++ b/libc/elf/dl-close.c
@@ -643,9 +643,7 @@ _dl_close_worker (struct link_map *map)
imap->l_prev->l_next = imap->l_next;
else
{
-#ifdef SHARED
assert (nsid != LM_ID_BASE);
-#endif
ns->_ns_loaded = imap->l_next;
/* Update the pointer to the head of the list
@@ -736,13 +734,7 @@ _dl_close_worker (struct link_map *map)
if (__builtin_expect (ns->_ns_loaded == NULL, 0)
&& nsid == GL(dl_nns) - 1)
do
- {
- --GL(dl_nns);
-#ifndef SHARED
- if (GL(dl_nns) == 0)
- break;
-#endif
- }
+ --GL(dl_nns);
while (GL(dl_ns)[GL(dl_nns) - 1]._ns_loaded == NULL);
/* Notify the debugger those objects are finalized and gone. */
diff --git a/libc/elf/dl-iteratephdr.c b/libc/elf/dl-iteratephdr.c
index 76e98aa2f..6572ec3a3 100644
--- a/libc/elf/dl-iteratephdr.c
+++ b/libc/elf/dl-iteratephdr.c
@@ -86,34 +86,4 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
}
hidden_def (__dl_iterate_phdr)
-#ifdef SHARED
-
weak_alias (__dl_iterate_phdr, dl_iterate_phdr);
-
-#else
-
-int
-dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
- size_t size, void *data), void *data)
-{
- if (_dl_phnum != 0)
- {
- /* This entry describes this statically-linked program itself. */
- struct dl_phdr_info info;
- int ret;
- info.dlpi_addr = 0;
- info.dlpi_name = "";
- info.dlpi_phdr = _dl_phdr;
- info.dlpi_phnum = _dl_phnum;
- info.dlpi_adds = GL(dl_load_adds);
- info.dlpi_subs = GL(dl_load_adds) - GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
- ret = (*callback) (&info, sizeof (struct dl_phdr_info), data);
- if (ret)
- return ret;
- }
-
- return __dl_iterate_phdr (callback, data);
-}
-
-
-#endif
diff --git a/libc/elf/dl-load.c b/libc/elf/dl-load.c
index fdd4d264a..086197e07 100644
--- a/libc/elf/dl-load.c
+++ b/libc/elf/dl-load.c
@@ -2233,23 +2233,17 @@ _dl_map_object (struct link_map *loader, const char *name,
if (cached != NULL)
{
-# ifdef SHARED
// XXX Correct to unconditionally default to namespace 0?
l = (loader
?: GL(dl_ns)[LM_ID_BASE]._ns_loaded
- ?: &GL(dl_rtld_map));
-# else
- l = loader;
+# ifdef SHARED
+ ?: &GL(dl_rtld_map)
# endif
+ );
/* If the loader has the DF_1_NODEFLIB flag set we must not
use a cache entry from any of these directories. */
- if (
-# ifndef SHARED
- /* 'l' is always != NULL for dynamically linked objects. */
- l != NULL &&
-# endif
- __builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0))
+ if (__builtin_expect (l->l_flags_1 & DF_1_NODEFLIB, 0))
{
const char *dirp = system_dirs;
unsigned int cnt = 0;
diff --git a/libc/elf/dl-misc.c b/libc/elf/dl-misc.c
index 043185aa7..8fd67100e 100644
--- a/libc/elf/dl-misc.c
+++ b/libc/elf/dl-misc.c
@@ -19,7 +19,6 @@
#include <assert.h>
#include <fcntl.h>
#include <ldsodefs.h>
-#include <libc-symbols.h>
#include <limits.h>
#include <link.h>
#include <stdarg.h>
@@ -365,144 +364,3 @@ _dl_higher_prime_number (unsigned long int n)
return *low;
}
-
-/* To support accessing TLS variables from signal handlers, we need an
- async signal safe memory allocator. These routines are never
- themselves invoked reentrantly (all calls to them are surrounded by
- signal masks) but may be invoked concurrently from many threads.
- The current implementation is not particularly performant nor space
- efficient, but it will be used rarely (and only in binaries that use
- dlopen.) The API matches that of malloc() and friends. */
-
-struct __signal_safe_allocator_header
-{
- size_t size;
- void *start;
-};
-
-static inline struct __signal_safe_allocator_header *
-ptr_to_signal_safe_allocator_header (void *ptr)
-{
- return (struct __signal_safe_allocator_header *)
- ((char *) (ptr) - sizeof (struct __signal_safe_allocator_header));
-}
-
-void *weak_function
-__signal_safe_memalign (size_t boundary, size_t size)
-{
- struct __signal_safe_allocator_header *header;
-
- if (boundary < sizeof (*header))
- boundary = sizeof (*header);
-
- /* Boundary must be a power of two. */
- if (!powerof2 (boundary))
- return NULL;
-
- size_t pg = GLRO (dl_pagesize);
- size_t padded_size;
- if (boundary <= pg)
- {
- /* We'll get a pointer certainly aligned to boundary, so just
- add one more boundary-sized chunk to hold the header. */
- padded_size = roundup (size, boundary) + boundary;
- }
- else
- {
- /* If we want K pages aligned to a J-page boundary, K+J+1 pages
- contains at least one such region that isn't directly at the start
- (so we can place the header.) This is wasteful, but you're the one
- who wanted 64K-aligned TLS. */
- padded_size = roundup (size, pg) + boundary + pg;
- }
-
-
- size_t actual_size = roundup (padded_size, pg);
- void *actual = mmap (NULL, actual_size, PROT_READ | PROT_WRITE,
- MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
- if (actual == MAP_FAILED)
- return NULL;
-
- if (boundary <= pg)
- {
- header = actual + boundary - sizeof (*header);
- }
- else
- {
- intptr_t actual_pg = ((intptr_t) actual) / pg;
- intptr_t boundary_pg = boundary / pg;
- intptr_t start_pg = actual_pg + boundary_pg;
- start_pg -= start_pg % boundary_pg;
- if (start_pg > (actual_pg + 1))
- {
- int ret = munmap (actual, (start_pg - actual_pg - 1) * pg);
- assert (ret == 0);
- actual = (void *) ((start_pg - 1) * pg);
- }
- char *start = (void *) (start_pg * pg);
- header = ptr_to_signal_safe_allocator_header (start);
- }
-
- header->size = actual_size;
- header->start = actual;
- void *ptr = header;
- ptr += sizeof (*header);
- if (((intptr_t) ptr) % boundary != 0)
- _dl_fatal_printf ("__signal_safe_memalign produced incorrect alignment\n");
- return ptr;
-}
-
-void * weak_function
-__signal_safe_malloc (size_t size)
-{
- return __signal_safe_memalign (1, size);
-}
-
-void weak_function
-__signal_safe_free (void *ptr)
-{
- if (ptr == NULL)
- return;
-
- struct __signal_safe_allocator_header *header
- = ptr_to_signal_safe_allocator_header (ptr);
- int ret = munmap (header->start, header->size);
-
- assert (ret == 0);
-}
-
-void * weak_function
-__signal_safe_realloc (void *ptr, size_t size)
-{
- if (size == 0)
- {
- __signal_safe_free (ptr);
- return NULL;
- }
- if (ptr == NULL)
- return __signal_safe_malloc (size);
-
- struct __signal_safe_allocator_header *header
- = ptr_to_signal_safe_allocator_header (ptr);
- size_t old_size = header->size;
- if (old_size - sizeof (*header) >= size)
- return ptr;
-
- void *new_ptr = __signal_safe_malloc (size);
- if (new_ptr == NULL)
- return NULL;
-
- memcpy (new_ptr, ptr, old_size);
- __signal_safe_free (ptr);
-
- return new_ptr;
-}
-
-void * weak_function
-__signal_safe_calloc (size_t nmemb, size_t size)
-{
- void *ptr = __signal_safe_malloc (nmemb * size);
- if (ptr == NULL)
- return NULL;
- return memset (ptr, 0, nmemb * size);
-}
diff --git a/libc/elf/dl-open.c b/libc/elf/dl-open.c
index e5e6e069e..6c096d30d 100644
--- a/libc/elf/dl-open.c
+++ b/libc/elf/dl-open.c
@@ -548,10 +548,7 @@ cannot load any more object with static TLS"));
generation of the DSO we are allocating data for. */
_dl_update_slotinfo (imap->l_tls_modid);
#endif
- /* We do this iteration under a signal mask in dl-reloc; why not
- here? Because these symbols are new and dlopen hasn't
- returned yet. So we can't possibly be racing with a TLS
- access to them from another thread. */
+
GL(dl_init_static_tls) (imap);
assert (imap->l_need_tls_init == 0);
}
diff --git a/libc/elf/dl-reloc.c b/libc/elf/dl-reloc.c
index d45891779..4f1279239 100644
--- a/libc/elf/dl-reloc.c
+++ b/libc/elf/dl-reloc.c
@@ -16,10 +16,8 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <atomic.h>
#include <errno.h>
#include <libintl.h>
-#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <ldsodefs.h>
@@ -72,6 +70,8 @@ _dl_try_allocate_static_tls (struct link_map *map)
size_t offset = GL(dl_tls_static_used) + (freebytes - n * map->l_tls_align
- map->l_tls_firstbyte_offset);
+
+ map->l_tls_offset = GL(dl_tls_static_used) = offset;
#elif TLS_DTV_AT_TP
/* dl_tls_static_used includes the TCB at the beginning. */
size_t offset = (((GL(dl_tls_static_used)
@@ -83,36 +83,7 @@ _dl_try_allocate_static_tls (struct link_map *map)
if (used > GL(dl_tls_static_size))
goto fail;
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
- /* We've computed the new value we want, now try to install it. */
- ptrdiff_t val;
- if ((val = map->l_tls_offset) == NO_TLS_OFFSET)
- {
- /* l_tls_offset starts out at NO_TLS_OFFSET, and all attempts to
- change it go from NO_TLS_OFFSET to some other value. We use
- compare_and_exchange to ensure only one attempt succeeds. We
- don't actually need any memory ordering here, but _acq is the
- weakest available. */
- (void ) atomic_compare_and_exchange_bool_acq (&map->l_tls_offset,
- offset,
- NO_TLS_OFFSET);
- val = map->l_tls_offset;
- assert (val != NO_TLS_OFFSET);
- }
- if (val != offset)
- {
- /* We'd like to set a static offset for this section, but another
- thread has already used a dynamic TLS block for it. Since we can
- only use static offsets if everyone does (and it's not practical
- to move that thread's dynamic block), we have to fail. */
- goto fail;
- }
- /* We installed the value; now update the globals. */
-#if TLS_TCB_AT_TP
- GL(dl_tls_static_used) = offset;
-#elif TLS_DTV_AT_TP
+ map->l_tls_offset = offset;
map->l_tls_firstbyte_offset = GL(dl_tls_static_used);
GL(dl_tls_static_used) = used;
#else
@@ -143,17 +114,8 @@ void
internal_function __attribute_noinline__
_dl_allocate_static_tls (struct link_map *map)
{
- /* We wrap this in a signal mask because it has to iterate all threads
- (including this one) and update this map's TLS entry. A signal handler
- accessing TLS would try to do the same update and break. */
- sigset_t old;
- _dl_mask_all_signals (&old);
- int err = -1;
- if (map->l_tls_offset != FORCED_DYNAMIC_TLS_OFFSET)
- err = _dl_try_allocate_static_tls (map);
-
- _dl_unmask_signals (&old);
- if (err != 0)
+ if (map->l_tls_offset == FORCED_DYNAMIC_TLS_OFFSET
+ || _dl_try_allocate_static_tls (map))
{
_dl_signal_error (0, map->l_name, NULL, N_("\
cannot allocate memory in static TLS block"));
diff --git a/libc/elf/dl-support.c b/libc/elf/dl-support.c
index 1b8588929..32df06fb6 100644
--- a/libc/elf/dl-support.c
+++ b/libc/elf/dl-support.c
@@ -94,6 +94,7 @@ static struct link_map _dl_main_map =
.l_scope = _dl_main_map.l_scope_mem,
.l_local_scope = { &_dl_main_map.l_searchlist },
.l_used = 1,
+ .l_flags_1 = DF_1_NODEFLIB,
.l_tls_offset = NO_TLS_OFFSET,
.l_serial = 1,
};
@@ -314,6 +315,8 @@ internal_function
_dl_non_dynamic_init (void)
{
_dl_main_map.l_origin = _dl_get_origin ();
+ _dl_main_map.l_phdr = GL(dl_phdr);
+ _dl_main_map.l_phnum = GL(dl_phnum);
if (HP_TIMING_AVAIL)
HP_TIMING_NOW (_dl_cpuclock_offset);
diff --git a/libc/elf/dl-tls.c b/libc/elf/dl-tls.c
index 50ec876ea..dbaea0aa9 100644
--- a/libc/elf/dl-tls.c
+++ b/libc/elf/dl-tls.c
@@ -17,7 +17,6 @@
<http://www.gnu.org/licenses/>. */
#include <assert.h>
-#include <atomic.h>
#include <errno.h>
#include <libintl.h>
#include <signal.h>
@@ -294,7 +293,7 @@ allocate_dtv (void *result)
initial set of modules. This should avoid in most cases expansions
of the dtv. */
dtv_length = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS;
- dtv = __signal_safe_calloc (dtv_length + 2, sizeof (dtv_t));
+ dtv = calloc (dtv_length + 2, sizeof (dtv_t));
if (dtv != NULL)
{
/* This is the initial length of the dtv. */
@@ -464,18 +463,6 @@ _dl_allocate_tls (void *mem)
}
rtld_hidden_def (_dl_allocate_tls)
-void
-internal_function
-_dl_clear_dtv (dtv_t *dtv)
-{
- for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt)
- if (! dtv[1 + cnt].pointer.is_static
- && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED)
- __signal_safe_free (dtv[1 + cnt].pointer.val);
- memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t));
-}
-
-rtld_hidden_def (_dl_clear_dtv)
#ifndef SHARED
extern dtv_t _dl_static_dtv[];
@@ -492,11 +479,11 @@ _dl_deallocate_tls (void *tcb, bool dealloc_tcb)
for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt)
if (! dtv[1 + cnt].pointer.is_static
&& dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED)
- __signal_safe_free (dtv[1 + cnt].pointer.val);
+ free (dtv[1 + cnt].pointer.val);
/* The array starts with dtv[-1]. */
if (dtv != GL(dl_initial_dtv))
- __signal_safe_free (dtv - 1);
+ free (dtv - 1);
if (dealloc_tcb)
{
@@ -534,21 +521,20 @@ rtld_hidden_def (_dl_deallocate_tls)
# endif
-static void
-allocate_and_init (dtv_t *dtv, struct link_map *map)
+static void *
+allocate_and_init (struct link_map *map)
{
void *newp;
- newp = __signal_safe_memalign (map->l_tls_align, map->l_tls_blocksize);
+
+ newp = __libc_memalign (map->l_tls_align, map->l_tls_blocksize);
if (newp == NULL)
oom ();
- /* Initialize the memory. Since this is our thread's space, we are
- under a signal mask, and no one has touched this section before,
- we can safely just overwrite whatever's there. */
+ /* Initialize the memory. */
memset (__mempcpy (newp, map->l_tls_initimage, map->l_tls_initimage_size),
'\0', map->l_tls_blocksize - map->l_tls_initimage_size);
- dtv->pointer.val = newp;
+ return newp;
}
@@ -590,15 +576,7 @@ _dl_update_slotinfo (unsigned long int req_modid)
the entry we need. */
size_t new_gen = listp->slotinfo[idx].gen;
size_t total = 0;
- sigset_t old;
-
- _dl_mask_all_signals (&old);
- /* We use the signal mask as a lock against reentrancy here.
- Check that a signal taken before the lock didn't already
- update us. */
- dtv = THREAD_DTV ();
- if (dtv[0].counter >= listp->slotinfo[idx].gen)
- goto out;
+
/* We have to look through the entire dtv slotinfo list. */
listp = GL(dl_tls_dtv_slotinfo_list);
do
@@ -618,27 +596,25 @@ _dl_update_slotinfo (unsigned long int req_modid)
if (gen <= dtv[0].counter)
continue;
- size_t modid = total + cnt;
-
/* If there is no map this means the entry is empty. */
struct link_map *map = listp->slotinfo[cnt].map;
if (map == NULL)
{
/* If this modid was used at some point the memory
might still be allocated. */
- if (dtv[-1].counter >= modid
- && !dtv[modid].pointer.is_static
- && dtv[modid].pointer.val != TLS_DTV_UNALLOCATED)
+ if (! dtv[total + cnt].pointer.is_static
+ && dtv[total + cnt].pointer.val != TLS_DTV_UNALLOCATED)
{
- __signal_safe_free (dtv[modid].pointer.val);
- dtv[modid].pointer.val = TLS_DTV_UNALLOCATED;
+ free (dtv[total + cnt].pointer.val);
+ dtv[total + cnt].pointer.val = TLS_DTV_UNALLOCATED;
}
continue;
}
- assert (modid == map->l_tls_modid);
/* Check whether the current dtv array is large enough. */
+ size_t modid = map->l_tls_modid;
+ assert (total + cnt == modid);
if (dtv[-1].counter < modid)
{
/* Reallocate the dtv. */
@@ -652,18 +628,17 @@ _dl_update_slotinfo (unsigned long int req_modid)
{
/* This is the initial dtv that was allocated
during rtld startup using the dl-minimal.c
- malloc instead of the real allocator. We can't
+ malloc instead of the real malloc. We can't
free it, we have to abandon the old storage. */
- newp = __signal_safe_malloc (
- (2 + newsize) * sizeof (dtv_t));
+ newp = malloc ((2 + newsize) * sizeof (dtv_t));
if (newp == NULL)
oom ();
memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t));
}
else
{
- newp = __signal_safe_realloc (&dtv[-1],
+ newp = realloc (&dtv[-1],
(2 + newsize) * sizeof (dtv_t));
if (newp == NULL)
oom ();
@@ -693,7 +668,7 @@ _dl_update_slotinfo (unsigned long int req_modid)
deallocate even if it is this dtv entry we are
supposed to load. The reason is that we call
memalign and not malloc. */
- __signal_safe_free (dtv[modid].pointer.val);
+ free (dtv[modid].pointer.val);
/* This module is loaded dynamically- We defer memory
allocation. */
@@ -710,8 +685,6 @@ _dl_update_slotinfo (unsigned long int req_modid)
/* This will be the new maximum generation counter. */
dtv[0].counter = new_gen;
- out:
- _dl_unmask_signals (&old);
}
return the_map;
@@ -737,60 +710,39 @@ tls_get_addr_tail (GET_ADDR_ARGS, dtv_t *dtv, struct link_map *the_map)
the_map = listp->slotinfo[idx].map;
}
- sigset_t old;
- _dl_mask_all_signals (&old);
-
- /* As with update_slotinfo, we use the sigmask as a check against
- reentrancy. */
- if (dtv[GET_ADDR_MODULE].pointer.val != TLS_DTV_UNALLOCATED)
- goto out;
-
- /* Synchronize against a parallel dlopen() forcing this variable
- into static storage. If that happens, we have to be more careful
- about initializing the area, as that dlopen() will be iterating
- the threads to do so itself. */
- ptrdiff_t offset;
- if ((offset = the_map->l_tls_offset) == NO_TLS_OFFSET)
- {
- /* l_tls_offset starts out at NO_TLS_OFFSET, and all attempts to
- change it go from NO_TLS_OFFSET to some other value. We use
- compare_and_exchange to ensure only one attempt succeeds. We
- don't actually need any memory ordering here, but _acq is the
- weakest available. */
- (void) atomic_compare_and_exchange_bool_acq (&the_map->l_tls_offset,
- FORCED_DYNAMIC_TLS_OFFSET,
- NO_TLS_OFFSET);
- offset = the_map->l_tls_offset;
- assert (offset != NO_TLS_OFFSET);
- }
- if (offset == FORCED_DYNAMIC_TLS_OFFSET)
- {
- allocate_and_init (&dtv[GET_ADDR_MODULE], the_map);
- }
- else
+
+ again:
+ /* Make sure that, if a dlopen running in parallel forces the
+ variable into static storage, we'll wait until the address in the
+ static TLS block is set up, and use that. If we're undecided
+ yet, make sure we make the decision holding the lock as well. */
+ if (__builtin_expect (the_map->l_tls_offset
+ != FORCED_DYNAMIC_TLS_OFFSET, 0))
{
- void **pp = &dtv[GET_ADDR_MODULE].pointer.val;
- while (atomic_forced_read (*pp) == TLS_DTV_UNALLOCATED)
+ __rtld_lock_lock_recursive (GL(dl_load_lock));
+ if (__builtin_expect (the_map->l_tls_offset == NO_TLS_OFFSET, 1))
{
- /* for lack of a better (safe) thing to do, just spin.
- Someone else (not us; it's done under a signal mask) set
- this map to a static TLS offset, and they'll iterate all
- threads to initialize it. They'll eventually write
- to pointer.val, at which point we know they've fully
- completed initialization. */
- atomic_delay ();
+ the_map->l_tls_offset = FORCED_DYNAMIC_TLS_OFFSET;
+ __rtld_lock_unlock_recursive (GL(dl_load_lock));
+ }
+ else
+ {
+ __rtld_lock_unlock_recursive (GL(dl_load_lock));
+ if (__builtin_expect (the_map->l_tls_offset
+ != FORCED_DYNAMIC_TLS_OFFSET, 1))
+ {
+ void *p = dtv[GET_ADDR_MODULE].pointer.val;
+ if (__builtin_expect (p == TLS_DTV_UNALLOCATED, 0))
+ goto again;
+
+ return (char *) p + GET_ADDR_OFFSET;
+ }
}
- /* Make sure we've picked up their initialization of the actual
- block; this pairs against the write barrier in
- init_one_static_tls, guaranteeing that we see their write of
- the tls_initimage into the static region. */
- atomic_read_barrier ();
}
-out:
- assert (dtv[GET_ADDR_MODULE].pointer.val != TLS_DTV_UNALLOCATED);
- _dl_unmask_signals (&old);
+ void *p = dtv[GET_ADDR_MODULE].pointer.val = allocate_and_init (the_map);
+ dtv[GET_ADDR_MODULE].pointer.is_static = false;
- return (char *) dtv[GET_ADDR_MODULE].pointer.val + GET_ADDR_OFFSET;
+ return (char *) p + GET_ADDR_OFFSET;
}
diff --git a/libc/include/features.h b/libc/include/features.h
index 56e3da87f..21173a28c 100644
--- a/libc/include/features.h
+++ b/libc/include/features.h
@@ -367,7 +367,7 @@
/* Major and minor version number of the GNU C library package. Use
these macros to test for features in specific releases. */
#define __GLIBC__ 2
-#define __GLIBC_MINOR__ 18
+#define __GLIBC_MINOR__ 19
#define __GLIBC_PREREQ(maj, min) \
((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
diff --git a/libc/inet/netinet/in.h b/libc/inet/netinet/in.h
index ad9ce6cde..d8d8e5363 100644
--- a/libc/inet/netinet/in.h
+++ b/libc/inet/netinet/in.h
@@ -108,7 +108,7 @@ enum
#define IPPROTO_NONE IPPROTO_NONE
IPPROTO_DSTOPTS = 60, /* IPv6 destination options. */
#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS
- IPPROTO_MH = 135, /* IPv6 mobility header. */
+ IPPROTO_MH = 135 /* IPv6 mobility header. */
#define IPPROTO_MH IPPROTO_MH
};
#endif /* !__USE_KERNEL_IPV6_DEFS */
diff --git a/libc/libio/Makefile b/libc/libio/Makefile
index b2aa50f0d..7c8036207 100644
--- a/libc/libio/Makefile
+++ b/libc/libio/Makefile
@@ -78,7 +78,7 @@ tests-$(OPTION_POSIX_WIDE_CHAR_DEVICE_IO) \
bug-wfflush bug-wmemstream1 tst-fopenloc2 \
tst_getwc \
tst_putwc tst_wprintf tst_wprintf2 tst_wscanf \
- tst-fgetwc bug-wsetpos tst-fseek
+ tst-fgetwc bug-wsetpos tst-fseek tst-ftell-partial-wide
tests-$(OPTION_POSIX_C_LANG_WIDE_CHAR) \
+= tst_swprintf tst_swscanf \
tst-sscanf \
diff --git a/libc/libio/tst-ftell-partial-wide.c b/libc/libio/tst-ftell-partial-wide.c
new file mode 100644
index 000000000..3734e774a
--- /dev/null
+++ b/libc/libio/tst-ftell-partial-wide.c
@@ -0,0 +1,107 @@
+/* Verify that ftell does not go into an infinite loop when a conversion fails
+ due to insufficient space in the buffer.
+ Copyright (C) 2014 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <wchar.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <errno.h>
+#include <unistd.h>
+
+static int do_test (void);
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
+
+/* Arbitrary number large enough so that the target buffer during conversion is
+ not large enough. */
+#define STRING_SIZE (1400)
+#define NSTRINGS (2)
+
+static int
+do_test (void)
+{
+ FILE *fp = NULL;
+ wchar_t *inputs[NSTRINGS] = {NULL};
+ int ret = 1;
+
+ if (setlocale (LC_ALL, "en_US.UTF-8") == NULL)
+ {
+ printf ("Cannot set en_US.UTF-8 locale.\n");
+ goto out;
+ }
+
+
+ /* Generate input from one character, chosen because it has an odd number of
+ bytes in UTF-8, making it easier to reproduce the problem:
+
+ NAME Hiragana letter GO
+ CHAR ã”
+ UTF-8 E38194
+ UCS 3054
+ MARC-8 692434 */
+ wchar_t seed = L'ã”';
+ for (int i = 0; i < NSTRINGS; i++)
+ {
+ inputs[i] = malloc (STRING_SIZE * sizeof (wchar_t));
+ if (inputs[i] == NULL)
+ {
+ printf ("Failed to allocate memory for inputs: %m\n");
+ goto out;
+ }
+ wmemset (inputs[i], seed, STRING_SIZE - 1);
+ inputs[i][STRING_SIZE - 1] = L'\0';
+ }
+
+ char *filename;
+ int fd = create_temp_file ("tst-fseek-wide-partial.out", &filename);
+
+ if (fd == -1)
+ {
+ printf ("create_temp_file: %m\n");
+ goto out;
+ }
+
+ fp = fdopen (fd, "w+");
+ if (fp == NULL)
+ {
+ printf ("fopen: %m\n");
+ close (fd);
+ goto out;
+ }
+
+ for (int i = 0; i < NSTRINGS; i++)
+ {
+ printf ("offset: %ld\n", ftell (fp));
+ if (fputws (inputs[i], fp) == -1)
+ {
+ perror ("fputws");
+ goto out;
+ }
+ }
+ ret = 0;
+
+out:
+ if (fp != NULL)
+ fclose (fp);
+ for (int i = 0; i < NSTRINGS; i++)
+ free (inputs[i]);
+
+ return ret;
+}
diff --git a/libc/libio/wfileops.c b/libc/libio/wfileops.c
index 87d3cdcf3..877fc1f82 100644
--- a/libc/libio/wfileops.c
+++ b/libc/libio/wfileops.c
@@ -715,7 +715,7 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
- fp->_wide_data->_IO_write_base) / clen;
else
{
- enum __codecvt_result status;
+ enum __codecvt_result status = __codecvt_ok;
delta = (fp->_wide_data->_IO_write_ptr
- fp->_wide_data->_IO_write_base);
const wchar_t *write_base = fp->_wide_data->_IO_write_base;
@@ -728,9 +728,12 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
flush buffers for every ftell. */
do
{
- /* Ugh, no point trying to avoid the flush. Just do it
- and go back to how it was with the read mode. */
- if (delta > 0 && new_write_ptr == fp->_IO_buf_end)
+ /* There is not enough space in the buffer to do the entire
+ conversion, so there is no point trying to avoid the
+ buffer flush. Just do it and go back to how it was with
+ the read mode. */
+ if (status == __codecvt_partial
+ || (delta > 0 && new_write_ptr == fp->_IO_buf_end))
{
if (_IO_switch_to_wget_mode (fp))
return WEOF;
diff --git a/libc/manual/Makefile b/libc/manual/Makefile
index 3037303a7..5f98b2abf 100644
--- a/libc/manual/Makefile
+++ b/libc/manual/Makefile
@@ -88,6 +88,7 @@ $(objpfx)libc/index.html: $(addprefix $(objpfx),$(libc-texi-generated))
$(objpfx)summary.texi: $(objpfx)stamp-summary ;
$(objpfx)stamp-summary: summary.awk $(filter-out $(objpfx)summary.texi, \
$(texis-path))
+ -$(SHELL) ./check-safety.sh $(filter-out $(objpfx)%, $(texis-path))
$(AWK) -f $^ | sort -t' ' -df -k 1,1 | tr '\014' '\012' \
> $(objpfx)summary-tmp
$(move-if-change) $(objpfx)summary-tmp $(objpfx)summary.texi
@@ -157,7 +158,7 @@ $(objpfx)%.pdf: %.texinfo
# Distribution.
minimal-dist = summary.awk texis.awk tsort.awk libc-texinfo.sh libc.texinfo \
- libm-err.texi stamp-libm-err \
+ libm-err.texi stamp-libm-err check-safety.sh \
$(filter-out summary.texi, $(nonexamples)) \
$(patsubst %.c.texi,examples/%.c, $(examples))
diff --git a/libc/manual/argp.texi b/libc/manual/argp.texi
index c9fbe975a..be1d158f2 100644
--- a/libc/manual/argp.texi
+++ b/libc/manual/argp.texi
@@ -36,6 +36,35 @@ needed in @code{main}.
@comment argp.h
@comment GNU
@deftypefun {error_t} argp_parse (const struct argp *@var{argp}, int @var{argc}, char **@var{argv}, unsigned @var{flags}, int *@var{arg_index}, void *@var{input})
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtslocale{} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c Optionally alloca()tes standard help options, initializes the parser,
+@c then parses individual args in a loop, and then finalizes.
+@c parser_init
+@c calc_sizes ok
+@c option_is_end ok
+@c malloc @ascuheap @acsmem
+@c parser_convert @mtslocale
+@c convert_options @mtslocale
+@c option_is_end ok
+@c option_is_short ok
+@c isprint, but locale may change within the loop
+@c find_long_option ok
+@c group_parse
+@c group->parser (from argp->parser)
+@c parser_parse_next
+@c getopt_long(_only)_r many issues, same as non_r minus @mtasurace
+@c parser_parse_arg
+@c group_parse dup
+@c parser_parse_opt
+@c group_parse dup
+@c argp_error dup @mtasurace:argpbuf @mtsenv @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c dgettext (bad key error) dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c parser_finalize
+@c group_parse
+@c fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem]
+@c dgettext dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c arg_state_help
+@c free dup @ascuhelp @acsmem
The @code{argp_parse} function parses the arguments in @var{argv}, of
length @var{argc}, using the argp parser @var{argp}. @xref{Argp
Parsers}. Passing a null pointer for @var{argp} is the same as using
@@ -660,6 +689,8 @@ parser function. @xref{Argp Parsing State}.
@comment argp.h
@comment GNU
@deftypefun void argp_usage (const struct argp_state *@var{state})
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
+@c Just calls argp_state_help with stderr and ARGP_HELP_STD_USAGE.
Outputs the standard usage message for the argp parser referred to by
@var{state} to @code{@var{state}->err_stream} and terminate the program
with @code{exit (argp_err_exit_status)}. @xref{Argp Global Variables}.
@@ -669,6 +700,13 @@ with @code{exit (argp_err_exit_status)}. @xref{Argp Global Variables}.
@comment argp.h
@comment GNU
@deftypefun void argp_error (const struct argp_state *@var{state}, const char *@var{fmt}, @dots{})
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
+@c Lock stream, vasprintf the formatted message into a buffer, print the
+@c buffer prefixed by the short program name (in libc,
+@c argp_short_program_name is a macro that expands to
+@c program_invocation_short_name), releases the buffer, then call
+@c argp_state_help with stream and ARGP_HELP_STD_ERR, unlocking the
+@c stream at the end.
Prints the printf format string @var{fmt} and following args, preceded
by the program name and @samp{:}, and followed by a @w{@samp{Try @dots{}
--help}} message, and terminates the program with an exit status of
@@ -679,6 +717,12 @@ by the program name and @samp{:}, and followed by a @w{@samp{Try @dots{}
@comment argp.h
@comment GNU
@deftypefun void argp_failure (const struct argp_state *@var{state}, int @var{status}, int @var{errnum}, const char *@var{fmt}, @dots{})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
+@c Lock stream, write out the short program name, vasprintf the optional
+@c formatted message to a buffer, print the buffer prefixed by colon and
+@c blank, release the buffer, call strerror_r with an automatic buffer,
+@c print it out after colon and blank, put[w]c a line break, unlock the
+@c stream, then exit unless ARGP_NO_EXIT.
Similar to the standard gnu error-reporting function @code{error}, this
prints the program name and @samp{:}, the printf format string
@var{fmt}, and the appropriate following args. If it is non-zero, the
@@ -695,6 +739,142 @@ for options, bad phase of the moon, etc.
@comment argp.h
@comment GNU
@deftypefun void argp_state_help (const struct argp_state *@var{state}, FILE *@var{stream}, unsigned @var{flags})
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
+@c Just calls _help with the short program name and optionally exit.
+@c The main problems in _help, besides the usual issues with stream I/O
+@c and translation, are the use of a static buffer (uparams, thus
+@c @mtasurace:argpbuf) that makes the whole thing thread-unsafe, reading
+@c from the environment for ARGP_HELP_FMT, accessing the locale object
+@c multiple times.
+
+@c _help @mtsenv @mtasurace:argpbuf @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c dgettext @ascuintl
+@c flockfile @aculock
+@c funlockfile @aculock
+@c fill_in_uparams @mtsenv @mtasurace:argpbuf @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c argp_failure dup (status = errnum = 0)
+@c atoi dup @mtslocale
+@c argp_hol @ascuheap @acsmem
+@c make_hol @ascuheap @acsmem
+@c hol_add_cluster @ascuheap @acsmem
+@c hol_append @ascuheap @acsmem
+@c hol_set_group ok
+@c hol_find_entry ok
+@c hol_sort @mtslocale @acucorrupt
+@c qsort dup @acucorrupt
+@c hol_entry_qcmp @mtslocale
+@c hol_entry_cmp @mtslocale
+@c group_cmp ok
+@c hol_cluster_cmp ok
+@c group_cmp ok
+@c hol_entry_first_short @mtslocale
+@c hol_entry_short_iterate [@mtslocale]
+@c until_short ok
+@c oshort ok
+@c isprint ok
+@c odoc ok
+@c hol_entry_first_long ok
+@c canon_doc_option @mtslocale
+@c tolower dup
+@c hol_usage @mtslocale @ascuintl @ascuheap @acsmem
+@c hol_entry_short_iterate ok
+@c add_argless_short_opt ok
+@c argp_fmtstream_printf dup
+@c hol_entry_short_iterate @mtslocale @ascuintl @ascuheap @acsmem
+@c usage_argful_short_opt @mtslocale @ascuintl @ascuheap @acsmem
+@c dgettext dup
+@c argp_fmtstream_printf dup
+@c hol_entry_long_iterate @mtslocale @ascuintl @ascuheap @acsmem
+@c usage_long_opt @mtslocale @ascuintl @ascuheap @acsmem
+@c dgettext dup
+@c argp_fmtstream_printf dup
+@c hol_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c hol_entry_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_set_lmargin dup
+@c argp_fmtstream_wmargin dup
+@c argp_fmtstream_set_wmargin dup
+@c comma @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_putc dup
+@c hol_cluster_is_child ok
+@c argp_fmtstream_wmargin dup
+@c print_header dup
+@c argp_fmtstream_set_wmargin dup
+@c argp_fmtstream_puts dup
+@c indent_to dup
+@c argp_fmtstream_putc dup
+@c arg @mtslocale @ascuheap @acsmem
+@c argp_fmtstream_printf dup
+@c odoc dup
+@c argp_fmtstream_puts dup
+@c argp_fmtstream_printf dup
+@c print_header @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c dgettext dup
+@c filter_doc dup
+@c argp_fmtstream_putc dup
+@c indent_to dup
+@c argp_fmtstream_set_lmargin dup
+@c argp_fmtstream_set_wmargin dup
+@c argp_fmtstream_puts dup
+@c free dup
+@c filter_doc dup
+@c argp_fmtstream_point dup
+@c indent_to @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_point dup
+@c argp_fmtstream_putc dup
+@c dgettext dup
+@c filter_doc dup
+@c argp_fmtstream_putc dup
+@c argp_fmtstream_puts dup
+@c free dup
+@c hol_free @ascuheap @acsmem
+@c free dup
+@c argp_args_levels ok
+@c argp_args_usage @mtslocale @ascuintl @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c dgettext dup
+@c filter_doc ok
+@c argp_input ok
+@c argp->help_filter
+@c space @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_point dup
+@c argp_fmtstream_rmargin @mtslocale @asucorrupt @acucorrupt @aculock
+@c argp_fmtstream_update dup
+@c argp_fmtstream_putc dup
+@c argp_fmtstream_write dup
+@c free dup
+@c argp_doc @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
+@c dgettext @ascuintl
+@c strndup @ascuheap @acsmem
+@c argp_input dup
+@c argp->help_filter
+@c argp_fmtstream_putc @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_ensure dup
+@c argp_fmtstream_write dup
+@c argp_fmtstream_puts dup
+@c argp_fmtstream_point @mtslocale @asucorrupt @acucorrupt @aculock
+@c argp_fmtstream_update dup
+@c argp_fmtstream_lmargin dup
+@c free dup
+@c argp_make_fmtstream @ascuheap @acsmem
+@c argp_fmtstream_free @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_update @mtslocale @asucorrupt @acucorrupt @aculock
+@c put[w]c_unlocked dup
+@c isblank in loop @mtslocale
+@c fxprintf @aculock
+@c fxprintf @aculock
+@c free dup
+@c argp_fmtstream_set_wmargin @mtslocale @asucorrupt @acucorrupt @aculock
+@c argp_fmtstream_update dup
+@c argp_fmtstream_printf @mtslocale @ascuheap @acsmem
+@c argp_fmtstream_ensure dup
+@c vsnprintf dup
+@c argp_fmtstream_set_lmargin @mtslocale @asucorrupt @acucorrupt @aculock
+@c argp_fmtstream_update dup
+@c argp_fmtstream_puts @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_write @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_ensure @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
+@c argp_fmtstream_update dup
+@c fxprintf @aculock
+@c realloc @ascuheap @acsmem
Outputs a help message for the argp parser referred to by @var{state},
to @var{stream}. The @var{flags} argument determines what sort of help
message is produced. @xref{Argp Help Flags}.
@@ -928,6 +1108,8 @@ program options, argp offers the @code{argp_help} interface.
@comment argp.h
@comment GNU
@deftypefun void argp_help (const struct argp *@var{argp}, FILE *@var{stream}, unsigned @var{flags}, char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
+@c Just calls _help.
This outputs a help message for the argp parser @var{argp} to
@var{stream}. The type of messages printed will be determined by
@var{flags}.
diff --git a/libc/manual/arith.texi b/libc/manual/arith.texi
index d394c0788..d1060140a 100644
--- a/libc/manual/arith.texi
+++ b/libc/manual/arith.texi
@@ -160,6 +160,8 @@ The remainder from the division.
@comment stdlib.h
@comment ISO
@deftypefun div_t div (int @var{numerator}, int @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Functions in this section are pure, and thus safe.
This function @code{div} computes the quotient and remainder from
the division of @var{numerator} by @var{denominator}, returning the
result in a structure of type @code{div_t}.
@@ -199,6 +201,7 @@ type @code{long int} rather than @code{int}.)
@comment stdlib.h
@comment ISO
@deftypefun ldiv_t ldiv (long int @var{numerator}, long int @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{ldiv} function is similar to @code{div}, except that the
arguments are of type @code{long int} and the result is returned as a
structure of type @code{ldiv_t}.
@@ -225,6 +228,7 @@ type @code{long long int} rather than @code{int}.)
@comment stdlib.h
@comment ISO
@deftypefun lldiv_t lldiv (long long int @var{numerator}, long long int @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{lldiv} function is like the @code{div} function, but the
arguments are of type @code{long long int} and the result is returned as
a structure of type @code{lldiv_t}.
@@ -256,6 +260,7 @@ See @ref{Integers} for a description of the @code{intmax_t} type.
@comment inttypes.h
@comment ISO
@deftypefun imaxdiv_t imaxdiv (intmax_t @var{numerator}, intmax_t @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{imaxdiv} function is like the @code{div} function, but the
arguments are of type @code{intmax_t} and the result is returned as
a structure of type @code{imaxdiv_t}.
@@ -318,6 +323,7 @@ floating-point number a variable holds.
@comment math.h
@comment ISO
@deftypefn {Macro} int fpclassify (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is a generic macro which works on all floating-point types and
which returns a value of type @code{int}. The possible values are:
@@ -354,6 +360,7 @@ You should therefore use the specific macros whenever possible.
@comment math.h
@comment ISO
@deftypefn {Macro} int isfinite (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if @var{x} is finite: not plus or
minus infinity, and not NaN. It is equivalent to
@@ -368,6 +375,7 @@ floating-point type.
@comment math.h
@comment ISO
@deftypefn {Macro} int isnormal (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if @var{x} is finite and normalized.
It is equivalent to
@@ -379,6 +387,7 @@ It is equivalent to
@comment math.h
@comment ISO
@deftypefn {Macro} int isnan (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if @var{x} is NaN. It is equivalent
to
@@ -390,6 +399,7 @@ to
@comment math.h
@comment GNU
@deftypefn {Macro} int issignaling (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if @var{x} is a signaling NaN
(sNaN). It is based on draft TS 18661 and currently enabled as a GNU
extension.
@@ -410,6 +420,7 @@ not have to worry about the type of their argument.
@comment math.h
@comment BSD
@deftypefunx int isinfl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns @code{-1} if @var{x} represents negative infinity,
@code{1} if @var{x} represents positive infinity, and @code{0} otherwise.
@end deftypefun
@@ -423,6 +434,7 @@ This function returns @code{-1} if @var{x} represents negative infinity,
@comment math.h
@comment BSD
@deftypefunx int isnanl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns a nonzero value if @var{x} is a ``not a number''
value, and zero otherwise.
@@ -445,6 +457,7 @@ function for some reason, you can write
@comment math.h
@comment BSD
@deftypefunx int finitel (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns a nonzero value if @var{x} is finite or a ``not a
number'' value, and zero otherwise.
@end deftypefun
@@ -714,6 +727,14 @@ and save and restore the set of exceptions flagged.
@comment fenv.h
@comment ISO
@deftypefun int feclearexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{@assposix{}}@acsafe{@acsposix{}}}
+@c The other functions in this section that modify FP status register
+@c mostly do so with non-atomic load-modify-store sequences, but since
+@c the register is thread-specific, this should be fine, and safe for
+@c cancellation. As long as the FP environment is restored before the
+@c signal handler returns control to the interrupted thread (like any
+@c kernel should do), the functions are also safe for use in signal
+@c handlers.
This function clears all of the supported exception flags indicated by
@var{excepts}.
@@ -724,6 +745,7 @@ non-zero value otherwise.
@comment fenv.h
@comment ISO
@deftypefun int feraiseexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function raises the supported exceptions indicated by
@var{excepts}. If more than one exception bit in @var{excepts} is set
the order in which the exceptions are raised is undefined except that
@@ -739,6 +761,7 @@ non-zero value otherwise.
@comment fenv.h
@comment ISO
@deftypefun int fetestexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Test whether the exception flags indicated by the parameter @var{except}
are currently set. If any of them are, a nonzero value is returned
which specifies which exceptions are set. Otherwise the result is zero.
@@ -775,6 +798,7 @@ following functions:
@comment fenv.h
@comment ISO
@deftypefun int fegetexceptflag (fexcept_t *@var{flagp}, int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function stores in the variable pointed to by @var{flagp} an
implementation-defined value representing the current setting of the
exception flags indicated by @var{excepts}.
@@ -786,6 +810,7 @@ non-zero value otherwise.
@comment fenv.h
@comment ISO
@deftypefun int fesetexceptflag (const fexcept_t *@var{flagp}, int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function restores the flags for the exceptions indicated by
@var{excepts} to the values stored in the variable pointed to by
@var{flagp}.
@@ -951,6 +976,7 @@ find out which one with this function:
@comment fenv.h
@comment ISO
@deftypefun int fegetround (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns the currently selected rounding mode, represented by one of the
values of the defined rounding mode macros.
@end deftypefun
@@ -961,6 +987,7 @@ To change the rounding mode, use this function:
@comment fenv.h
@comment ISO
@deftypefun int fesetround (int @var{round})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Changes the currently selected rounding mode to @var{round}. If
@var{round} does not correspond to one of the supported rounding modes
nothing is changed. @code{fesetround} returns zero if it changed the
@@ -1005,6 +1032,7 @@ To save the state of the FPU, use one of these functions:
@comment fenv.h
@comment ISO
@deftypefun int fegetenv (fenv_t *@var{envp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Store the floating-point environment in the variable pointed to by
@var{envp}.
@@ -1015,6 +1043,7 @@ non-zero value otherwise.
@comment fenv.h
@comment ISO
@deftypefun int feholdexcept (fenv_t *@var{envp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Store the current floating-point environment in the object pointed to by
@var{envp}. Then clear all exception flags, and set the FPU to trap no
exceptions. Not all FPUs support trapping no exceptions; if
@@ -1053,6 +1082,7 @@ functions:
@comment fenv.h
@comment ISO
@deftypefun int fesetenv (const fenv_t *@var{envp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the floating-point environment to that described by @var{envp}.
The function returns zero in case the operation was successful, a
@@ -1062,6 +1092,7 @@ non-zero value otherwise.
@comment fenv.h
@comment ISO
@deftypefun int feupdateenv (const fenv_t *@var{envp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Like @code{fesetenv}, this function sets the floating-point environment
to that described by @var{envp}. However, if any exceptions were
flagged in the status word before @code{feupdateenv} was called, they
@@ -1082,6 +1113,7 @@ occur, you can use the following two functions.
@comment fenv.h
@comment GNU
@deftypefun int feenableexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This functions enables traps for each of the exceptions as indicated by
the parameter @var{except}. The individual exceptions are described in
@ref{Status bit operations}. Only the specified exceptions are
@@ -1094,6 +1126,7 @@ operation was successful, @code{-1} otherwise.
@comment fenv.h
@comment GNU
@deftypefun int fedisableexcept (int @var{excepts})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This functions disables traps for each of the exceptions as indicated by
the parameter @var{except}. The individual exceptions are described in
@ref{Status bit operations}. Only the specified exceptions are
@@ -1106,6 +1139,7 @@ operation was successful, @code{-1} otherwise.
@comment fenv.h
@comment GNU
@deftypefun int fegetexcept (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function returns a bitmask of all currently enabled exceptions. It
returns @code{-1} in case of failure.
@end deftypefun
@@ -1157,6 +1191,7 @@ Prototypes for @code{abs}, @code{labs} and @code{llabs} are in @file{stdlib.h};
@comment inttypes.h
@comment ISO
@deftypefunx intmax_t imaxabs (intmax_t @var{number})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the absolute value of @var{number}.
Most computers use a two's complement integer representation, in which
@@ -1178,6 +1213,7 @@ See @ref{Integers} for a description of the @code{intmax_t} type.
@comment math.h
@comment ISO
@deftypefunx {long double} fabsl (long double @var{number})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns the absolute value of the floating-point number
@var{number}.
@end deftypefun
@@ -1191,6 +1227,7 @@ This function returns the absolute value of the floating-point number
@comment complex.h
@comment ISO
@deftypefunx {long double} cabsl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the absolute value of the complex number @var{z}
(@pxref{Complex Numbers}). The absolute value of a complex number is:
@@ -1228,6 +1265,7 @@ All these functions are declared in @file{math.h}.
@comment math.h
@comment ISO
@deftypefunx {long double} frexpl (long double @var{value}, int *@var{exponent})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are used to split the number @var{value}
into a normalized fraction and an exponent.
@@ -1253,6 +1291,7 @@ zero is stored in @code{*@var{exponent}}.
@comment math.h
@comment ISO
@deftypefunx {long double} ldexpl (long double @var{value}, int @var{exponent})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the result of multiplying the floating-point
number @var{value} by 2 raised to the power @var{exponent}. (It can
be used to reassemble floating-point numbers that were taken apart
@@ -1274,6 +1313,7 @@ equivalent to those of @code{ldexp} and @code{frexp}. See also the
@comment math.h
@comment BSD
@deftypefunx {long double} scalbl (long double @var{value}, long double @var{exponent})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{scalb} function is the BSD name for @code{ldexp}.
@end deftypefun
@@ -1286,6 +1326,7 @@ The @code{scalb} function is the BSD name for @code{ldexp}.
@comment math.h
@comment BSD
@deftypefunx {long double} scalbnl (long double @var{x}, int @var{n})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{scalbn} is identical to @code{scalb}, except that the exponent
@var{n} is an @code{int} instead of a floating-point number.
@end deftypefun
@@ -1299,6 +1340,7 @@ The @code{scalb} function is the BSD name for @code{ldexp}.
@comment math.h
@comment BSD
@deftypefunx {long double} scalblnl (long double @var{x}, long int @var{n})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{scalbln} is identical to @code{scalb}, except that the exponent
@var{n} is a @code{long int} instead of a floating-point number.
@end deftypefun
@@ -1312,6 +1354,7 @@ The @code{scalb} function is the BSD name for @code{ldexp}.
@comment math.h
@comment BSD
@deftypefunx {long double} significandl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{significand} returns the mantissa of @var{x} scaled to the range
@math{[1, 2)}.
It is equivalent to @w{@code{scalb (@var{x}, (double) -ilogb (@var{x}))}}.
@@ -1346,6 +1389,7 @@ result as a @code{double} instead to get around this problem.
@comment math.h
@comment ISO
@deftypefunx {long double} ceill (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions round @var{x} upwards to the nearest integer,
returning that value as a @code{double}. Thus, @code{ceil (1.5)}
is @code{2.0}.
@@ -1360,6 +1404,7 @@ is @code{2.0}.
@comment math.h
@comment ISO
@deftypefunx {long double} floorl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions round @var{x} downwards to the nearest
integer, returning that value as a @code{double}. Thus, @code{floor
(1.5)} is @code{1.0} and @code{floor (-1.5)} is @code{-2.0}.
@@ -1374,6 +1419,7 @@ integer, returning that value as a @code{double}. Thus, @code{floor
@comment math.h
@comment ISO
@deftypefunx {long double} truncl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{trunc} functions round @var{x} towards zero to the nearest
integer (returned in floating-point format). Thus, @code{trunc (1.5)}
is @code{1.0} and @code{trunc (-1.5)} is @code{-1.0}.
@@ -1388,6 +1434,7 @@ is @code{1.0} and @code{trunc (-1.5)} is @code{-1.0}.
@comment math.h
@comment ISO
@deftypefunx {long double} rintl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions round @var{x} to an integer value according to the
current rounding mode. @xref{Floating Point Parameters}, for
information about the various rounding modes. The default
@@ -1408,6 +1455,7 @@ inexact exception.
@comment math.h
@comment ISO
@deftypefunx {long double} nearbyintl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the same value as the @code{rint} functions, but
do not raise the inexact exception if @var{x} is not an integer.
@end deftypefun
@@ -1421,6 +1469,7 @@ do not raise the inexact exception if @var{x} is not an integer.
@comment math.h
@comment ISO
@deftypefunx {long double} roundl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are similar to @code{rint}, but they round halfway
cases away from zero instead of to the nearest integer (or other
current rounding mode).
@@ -1435,6 +1484,7 @@ current rounding mode).
@comment math.h
@comment ISO
@deftypefunx {long int} lrintl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are just like @code{rint}, but they return a
@code{long int} instead of a floating-point number.
@end deftypefun
@@ -1448,6 +1498,7 @@ These functions are just like @code{rint}, but they return a
@comment math.h
@comment ISO
@deftypefunx {long long int} llrintl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are just like @code{rint}, but they return a
@code{long long int} instead of a floating-point number.
@end deftypefun
@@ -1461,6 +1512,7 @@ These functions are just like @code{rint}, but they return a
@comment math.h
@comment ISO
@deftypefunx {long int} lroundl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are just like @code{round}, but they return a
@code{long int} instead of a floating-point number.
@end deftypefun
@@ -1474,6 +1526,7 @@ These functions are just like @code{round}, but they return a
@comment math.h
@comment ISO
@deftypefunx {long long int} llroundl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are just like @code{round}, but they return a
@code{long long int} instead of a floating-point number.
@end deftypefun
@@ -1488,6 +1541,7 @@ These functions are just like @code{round}, but they return a
@comment math.h
@comment ISO
@deftypefunx {long double} modfl (long double @var{value}, long double *@var{integer-part})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions break the argument @var{value} into an integer part and a
fractional part (between @code{-1} and @code{1}, exclusive). Their sum
equals @var{value}. Each of the parts has the same sign as @var{value},
@@ -1514,6 +1568,7 @@ suits your problem.
@comment math.h
@comment ISO
@deftypefunx {long double} fmodl (long double @var{numerator}, long double @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the remainder from the division of
@var{numerator} by @var{denominator}. Specifically, the return value is
@code{@var{numerator} - @w{@var{n} * @var{denominator}}}, where @var{n}
@@ -1536,6 +1591,7 @@ If @var{denominator} is zero, @code{fmod} signals a domain error.
@comment math.h
@comment BSD
@deftypefunx {long double} dreml (long double @var{numerator}, long double @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are like @code{fmod} except that they round the
internal quotient @var{n} to the nearest integer instead of towards zero
to an integer. For example, @code{drem (6.5, 2.3)} returns @code{-0.4},
@@ -1559,6 +1615,7 @@ If @var{denominator} is zero, @code{drem} signals a domain error.
@comment math.h
@comment BSD
@deftypefunx {long double} remainderl (long double @var{numerator}, long double @var{denominator})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is another name for @code{drem}.
@end deftypefun
@@ -1580,6 +1637,7 @@ bits.
@comment math.h
@comment ISO
@deftypefunx {long double} copysignl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return @var{x} but with the sign of @var{y}. They work
even if @var{x} or @var{y} are NaN or zero. Both of these can carry a
sign (although not all implementations support it) and this is one of
@@ -1595,6 +1653,7 @@ recommended functions in @w{IEEE 754}/@w{IEEE 854}).
@comment math.h
@comment ISO
@deftypefun int signbit (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{signbit} is a generic macro which can work on all floating-point
types. It returns a nonzero value if the value of @var{x} has its sign
bit set.
@@ -1613,6 +1672,7 @@ false, but @code{signbit (-0.0)} will return a nonzero value.
@comment math.h
@comment ISO
@deftypefunx {long double} nextafterl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{nextafter} function returns the next representable neighbor of
@var{x} in the direction towards @var{y}. The size of the step between
@var{x} and the result depends on the type of the result. If
@@ -1636,6 +1696,7 @@ recommended functions in @w{IEEE 754}/@w{IEEE 854}).
@comment math.h
@comment ISO
@deftypefunx {long double} nexttowardl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are identical to the corresponding versions of
@code{nextafter} except that their second argument is a @code{long
double}.
@@ -1651,6 +1712,8 @@ double}.
@comment math.h
@comment ISO
@deftypefunx {long double} nanl (const char *@var{tagp})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c The unsafe-but-ruled-safe locale use comes from strtod.
The @code{nan} function returns a representation of NaN, provided that
NaN is supported by the target platform.
@code{nan ("@var{n-char-sequence}")} is equivalent to
@@ -1685,6 +1748,7 @@ arguments only once.
@comment math.h
@comment ISO
@deftypefn Macro int isgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether the argument @var{x} is greater than
@var{y}. It is equivalent to @code{(@var{x}) > (@var{y})}, but no
exception is raised if @var{x} or @var{y} are NaN.
@@ -1693,6 +1757,7 @@ exception is raised if @var{x} or @var{y} are NaN.
@comment math.h
@comment ISO
@deftypefn Macro int isgreaterequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether the argument @var{x} is greater than or
equal to @var{y}. It is equivalent to @code{(@var{x}) >= (@var{y})}, but no
exception is raised if @var{x} or @var{y} are NaN.
@@ -1701,6 +1766,7 @@ exception is raised if @var{x} or @var{y} are NaN.
@comment math.h
@comment ISO
@deftypefn Macro int isless (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether the argument @var{x} is less than @var{y}.
It is equivalent to @code{(@var{x}) < (@var{y})}, but no exception is
raised if @var{x} or @var{y} are NaN.
@@ -1709,6 +1775,7 @@ raised if @var{x} or @var{y} are NaN.
@comment math.h
@comment ISO
@deftypefn Macro int islessequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether the argument @var{x} is less than or equal
to @var{y}. It is equivalent to @code{(@var{x}) <= (@var{y})}, but no
exception is raised if @var{x} or @var{y} are NaN.
@@ -1717,6 +1784,7 @@ exception is raised if @var{x} or @var{y} are NaN.
@comment math.h
@comment ISO
@deftypefn Macro int islessgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether the argument @var{x} is less or greater
than @var{y}. It is equivalent to @code{(@var{x}) < (@var{y}) ||
(@var{x}) > (@var{y})} (although it only evaluates @var{x} and @var{y}
@@ -1729,6 +1797,7 @@ expression is true if @var{x} or @var{y} are NaN.
@comment math.h
@comment ISO
@deftypefn Macro int isunordered (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro determines whether its arguments are unordered. In other
words, it is true if @var{x} or @var{y} are NaN, and false otherwise.
@end deftypefn
@@ -1762,6 +1831,7 @@ perform these operations faster than the equivalent C code.
@comment math.h
@comment ISO
@deftypefunx {long double} fminl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fmin} function returns the lesser of the two values @var{x}
and @var{y}. It is similar to the expression
@smallexample
@@ -1782,6 +1852,7 @@ are NaN, NaN is returned.
@comment math.h
@comment ISO
@deftypefunx {long double} fmaxl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fmax} function returns the greater of the two values @var{x}
and @var{y}.
@@ -1798,6 +1869,7 @@ are NaN, NaN is returned.
@comment math.h
@comment ISO
@deftypefunx {long double} fdiml (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fdim} function returns the positive difference between
@var{x} and @var{y}. The positive difference is @math{@var{x} -
@var{y}} if @var{x} is greater than @var{y}, and @math{0} otherwise.
@@ -1815,6 +1887,7 @@ If @var{x}, @var{y}, or both are NaN, NaN is returned.
@comment ISO
@deftypefunx {long double} fmal (long double @var{x}, long double @var{y}, long double @var{z})
@cindex butterfly
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fma} function performs floating-point multiply-add. This is
the operation @math{(@var{x} @mul{} @var{y}) + @var{z}}, but the
intermediate result is not rounded to the destination type. This can
@@ -1944,6 +2017,7 @@ available in three variants, one for each of the three complex types.
@comment complex.h
@comment ISO
@deftypefunx {long double} creall (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the real part of the complex number @var{z}.
@end deftypefun
@@ -1956,6 +2030,7 @@ These functions return the real part of the complex number @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {long double} cimagl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the imaginary part of the complex number @var{z}.
@end deftypefun
@@ -1968,6 +2043,7 @@ These functions return the imaginary part of the complex number @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} conjl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the conjugate value of the complex number
@var{z}. The conjugate of a complex number has the same real part and a
negated imaginary part. In other words, @samp{conj(a + bi) = a + -bi}.
@@ -1982,6 +2058,7 @@ negated imaginary part. In other words, @samp{conj(a + bi) = a + -bi}.
@comment complex.h
@comment ISO
@deftypefunx {long double} cargl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the argument of the complex number @var{z}.
The argument of a complex number is the angle in the complex plane
between the positive real axis and a line passing through zero and the
@@ -2000,6 +2077,7 @@ number. This angle is measured in the usual fashion and ranges from
@comment complex.h
@comment ISO
@deftypefunx {complex long double} cprojl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the projection of the complex value @var{z} onto
the Riemann sphere. Values with an infinite imaginary part are projected
to positive infinity on the real axis, even if the real part is NaN. If
@@ -2045,6 +2123,15 @@ as well.
@comment stdlib.h
@comment ISO
@deftypefun {long int} strtol (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c strtol uses the thread-local pointer to the locale in effect, and
+@c strtol_l loads the LC_NUMERIC locale data from it early on and once,
+@c but if the locale is the global locale, and another thread calls
+@c setlocale in a way that modifies the pointer to the LC_CTYPE locale
+@c category, the behavior of e.g. IS*, TOUPPER will vary throughout the
+@c execution of the function, because they re-read the locale data from
+@c the given locale pointer. We solved this by documenting setlocale as
+@c MT-Unsafe.
The @code{strtol} (``string-to-long'') function converts the initial
part of @var{string} to a signed integer, which is returned as a value
of type @code{long int}.
@@ -2108,6 +2195,7 @@ There is an example at the end of this section.
@comment wchar.h
@comment ISO
@deftypefun {long int} wcstol (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstol} function is equivalent to the @code{strtol} function
in nearly all aspects but handles wide character strings.
@@ -2117,6 +2205,7 @@ The @code{wcstol} function was introduced in @w{Amendment 1} of @w{ISO C90}.
@comment stdlib.h
@comment ISO
@deftypefun {unsigned long int} strtoul (const char *retrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{strtoul} (``string-to-unsigned-long'') function is like
@code{strtol} except it converts to an @code{unsigned long int} value.
The syntax is the same as described above for @code{strtol}. The value
@@ -2135,6 +2224,7 @@ range, or @code{ERANGE} on overflow.
@comment wchar.h
@comment ISO
@deftypefun {unsigned long int} wcstoul (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoul} function is equivalent to the @code{strtoul} function
in nearly all aspects but handles wide character strings.
@@ -2144,6 +2234,7 @@ The @code{wcstoul} function was introduced in @w{Amendment 1} of @w{ISO C90}.
@comment stdlib.h
@comment ISO
@deftypefun {long long int} strtoll (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{strtoll} function is like @code{strtol} except that it returns
a @code{long long int} value, and accepts numbers with a correspondingly
larger range.
@@ -2160,6 +2251,7 @@ The @code{strtoll} function was introduced in @w{ISO C99}.
@comment wchar.h
@comment ISO
@deftypefun {long long int} wcstoll (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoll} function is equivalent to the @code{strtoll} function
in nearly all aspects but handles wide character strings.
@@ -2169,12 +2261,14 @@ The @code{wcstoll} function was introduced in @w{Amendment 1} of @w{ISO C90}.
@comment stdlib.h
@comment BSD
@deftypefun {long long int} strtoq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
@code{strtoq} (``string-to-quad-word'') is the BSD name for @code{strtoll}.
@end deftypefun
@comment wchar.h
@comment GNU
@deftypefun {long long int} wcstoq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoq} function is equivalent to the @code{strtoq} function
in nearly all aspects but handles wide character strings.
@@ -2184,6 +2278,7 @@ The @code{wcstoq} function is a GNU extension.
@comment stdlib.h
@comment ISO
@deftypefun {unsigned long long int} strtoull (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{strtoull} function is related to @code{strtoll} the same way
@code{strtoul} is related to @code{strtol}.
@@ -2193,6 +2288,7 @@ The @code{strtoull} function was introduced in @w{ISO C99}.
@comment wchar.h
@comment ISO
@deftypefun {unsigned long long int} wcstoull (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoull} function is equivalent to the @code{strtoull} function
in nearly all aspects but handles wide character strings.
@@ -2202,12 +2298,14 @@ The @code{wcstoull} function was introduced in @w{Amendment 1} of @w{ISO C90}.
@comment stdlib.h
@comment BSD
@deftypefun {unsigned long long int} strtouq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
@code{strtouq} is the BSD name for @code{strtoull}.
@end deftypefun
@comment wchar.h
@comment GNU
@deftypefun {unsigned long long int} wcstouq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstouq} function is equivalent to the @code{strtouq} function
in nearly all aspects but handles wide character strings.
@@ -2217,6 +2315,7 @@ The @code{wcstouq} function is a GNU extension.
@comment inttypes.h
@comment ISO
@deftypefun intmax_t strtoimax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{strtoimax} function is like @code{strtol} except that it returns
a @code{intmax_t} value, and accepts numbers of a corresponding range.
@@ -2233,6 +2332,7 @@ See @ref{Integers} for a description of the @code{intmax_t} type. The
@comment wchar.h
@comment ISO
@deftypefun intmax_t wcstoimax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoimax} function is equivalent to the @code{strtoimax} function
in nearly all aspects but handles wide character strings.
@@ -2242,6 +2342,7 @@ The @code{wcstoimax} function was introduced in @w{ISO C99}.
@comment inttypes.h
@comment ISO
@deftypefun uintmax_t strtoumax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{strtoumax} function is related to @code{strtoimax}
the same way that @code{strtoul} is related to @code{strtol}.
@@ -2252,6 +2353,7 @@ See @ref{Integers} for a description of the @code{intmax_t} type. The
@comment wchar.h
@comment ISO
@deftypefun uintmax_t wcstoumax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstoumax} function is equivalent to the @code{strtoumax} function
in nearly all aspects but handles wide character strings.
@@ -2261,6 +2363,7 @@ The @code{wcstoumax} function was introduced in @w{ISO C99}.
@comment stdlib.h
@comment ISO
@deftypefun {long int} atol (const char *@var{string})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is similar to the @code{strtol} function with a @var{base}
argument of @code{10}, except that it need not detect overflow errors.
The @code{atol} function is provided mostly for compatibility with
@@ -2270,6 +2373,7 @@ existing code; using @code{strtol} is more robust.
@comment stdlib.h
@comment ISO
@deftypefun int atoi (const char *@var{string})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is like @code{atol}, except that it returns an @code{int}.
The @code{atoi} function is also considered obsolete; use @code{strtol}
instead.
@@ -2278,6 +2382,7 @@ instead.
@comment stdlib.h
@comment ISO
@deftypefun {long long int} atoll (const char *@var{string})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is similar to @code{atol}, except it returns a @code{long
long int}.
@@ -2342,6 +2447,35 @@ as well.
@comment stdlib.h
@comment ISO
@deftypefun double strtod (const char *restrict @var{string}, char **restrict @var{tailptr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Besides the unsafe-but-ruled-safe locale uses, this uses a lot of
+@c mpn, but it's all safe.
+@c
+@c round_and_return
+@c get_rounding_mode ok
+@c mpn_add_1 ok
+@c mpn_rshift ok
+@c MPN_ZERO ok
+@c MPN2FLOAT -> mpn_construct_(float|double|long_double) ok
+@c str_to_mpn
+@c mpn_mul_1 -> umul_ppmm ok
+@c mpn_add_1 ok
+@c mpn_lshift_1 -> mpn_lshift ok
+@c STRTOF_INTERNAL
+@c MPN_VAR ok
+@c SET_MANTISSA ok
+@c STRNCASECMP ok, wide and narrow
+@c round_and_return ok
+@c mpn_mul ok
+@c mpn_addmul_1 ok
+@c ... mpn_sub
+@c mpn_lshift ok
+@c udiv_qrnnd ok
+@c count_leading_zeros ok
+@c add_ssaaaa ok
+@c sub_ddmmss ok
+@c umul_ppmm ok
+@c mpn_submul_1 ok
The @code{strtod} (``string-to-double'') function converts the initial
part of @var{string} to a floating-point number, which is returned as a
value of type @code{double}.
@@ -2427,6 +2561,7 @@ examining @var{errno} and @var{tailptr}.
@comment stdlib.h
@comment ISO
@deftypefunx {long double} strtold (const char *@var{string}, char **@var{tailptr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
These functions are analogous to @code{strtod}, but return @code{float}
and @code{long double} values respectively. They report errors in the
same way as @code{strtod}. @code{strtof} can be substantially faster
@@ -2446,6 +2581,7 @@ These functions have been GNU extensions and are new to @w{ISO C99}.
@comment stdlib.h
@comment ISO
@deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are
equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and
@code{strtold} functions but it handles wide character string.
@@ -2458,6 +2594,7 @@ C90}. The @code{wcstof} and @code{wcstold} functions were introduced in
@comment stdlib.h
@comment ISO
@deftypefun double atof (const char *@var{string})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is similar to the @code{strtod} function, except that it
need not detect overflow and underflow errors. The @code{atof} function
is provided mostly for compatibility with existing code; using
@@ -2485,6 +2622,7 @@ All these functions are defined in @file{stdlib.h}.
@comment stdlib.h
@comment SVID, Unix98
@deftypefun {char *} ecvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
+@safety{@prelim{}@mtunsafe{@mtasurace{:ecvt}}@asunsafe{}@acsafe{}}
The function @code{ecvt} converts the floating-point number @var{value}
to a string with at most @var{ndigit} decimal digits. The
returned string contains no decimal point or sign. The first digit of
@@ -2510,6 +2648,7 @@ and sets @var{d} to @code{2} and @var{n} to @code{0}.
@comment stdlib.h
@comment SVID, Unix98
@deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
+@safety{@prelim{}@mtunsafe{@mtasurace{:fcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The function @code{fcvt} is like @code{ecvt}, but @var{ndigit} specifies
the number of digits after the decimal point. If @var{ndigit} is less
than zero, @var{value} is rounded to the @math{@var{ndigit}+1}'th place to the
@@ -2528,6 +2667,9 @@ to @code{fcvt}.
@comment stdlib.h
@comment SVID, Unix98
@deftypefun {char *} gcvt (double @var{value}, int @var{ndigit}, char *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c gcvt calls sprintf, that ultimately calls vfprintf, which malloc()s
+@c args_value if it's too large, but gcvt never exercises this path.
@code{gcvt} is functionally equivalent to @samp{sprintf(buf, "%*g",
ndigit, value}. It is provided only for compatibility's sake. It
returns @var{buf}.
@@ -2542,6 +2684,7 @@ functions that take @code{long double} arguments.
@comment stdlib.h
@comment GNU
@deftypefun {char *} qecvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
+@safety{@prelim{}@mtunsafe{@mtasurace{:qecvt}}@asunsafe{}@acsafe{}}
This function is equivalent to @code{ecvt} except that it takes a
@code{long double} for the first parameter and that @var{ndigit} is
restricted by the precision of a @code{long double}.
@@ -2550,6 +2693,7 @@ restricted by the precision of a @code{long double}.
@comment stdlib.h
@comment GNU
@deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
+@safety{@prelim{}@mtunsafe{@mtasurace{:qfcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function is equivalent to @code{fcvt} except that it
takes a @code{long double} for the first parameter and that @var{ndigit} is
restricted by the precision of a @code{long double}.
@@ -2558,6 +2702,7 @@ restricted by the precision of a @code{long double}.
@comment stdlib.h
@comment GNU
@deftypefun {char *} qgcvt (long double @var{value}, int @var{ndigit}, char *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is equivalent to @code{gcvt} except that it takes a
@code{long double} for the first parameter and that @var{ndigit} is
restricted by the precision of a @code{long double}.
@@ -2578,6 +2723,7 @@ user-supplied buffer.
@comment stdlib.h
@comment GNU
@deftypefun int ecvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{ecvt_r} function is the same as @code{ecvt}, except
that it places its result into the user-specified buffer pointed to by
@var{buf}, with length @var{len}. The return value is @code{-1} in
@@ -2589,6 +2735,7 @@ This function is a GNU extension.
@comment stdlib.h
@comment SVID, Unix98
@deftypefun int fcvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fcvt_r} function is the same as @code{fcvt}, except that it
places its result into the user-specified buffer pointed to by
@var{buf}, with length @var{len}. The return value is @code{-1} in
@@ -2600,6 +2747,7 @@ This function is a GNU extension.
@comment stdlib.h
@comment GNU
@deftypefun int qecvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{qecvt_r} function is the same as @code{qecvt}, except
that it places its result into the user-specified buffer pointed to by
@var{buf}, with length @var{len}. The return value is @code{-1} in
@@ -2611,6 +2759,7 @@ This function is a GNU extension.
@comment stdlib.h
@comment GNU
@deftypefun int qfcvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{qfcvt_r} function is the same as @code{qfcvt}, except
that it places its result into the user-specified buffer pointed to by
@var{buf}, with length @var{len}. The return value is @code{-1} in
diff --git a/libc/manual/charset.texi b/libc/manual/charset.texi
index a3e2577bf..b2d73abc1 100644
--- a/libc/manual/charset.texi
+++ b/libc/manual/charset.texi
@@ -504,6 +504,14 @@ sequence points. Communication protocols often require this.
@comment wchar.h
@comment ISO
@deftypefun int mbsinit (const mbstate_t *@var{ps})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c ps is dereferenced once, unguarded. This would call for @mtsrace:ps,
+@c but since a single word-sized field is (atomically) accessed, any
+@c race here would be harmless. Other functions that take an optional
+@c mbstate_t* argument named ps are marked with @mtasurace:<func>/!ps,
+@c to indicate that the function uses a static buffer if ps is NULL.
+@c These could also have been marked with @mtsrace:ps, but we'll omit
+@c that for brevity, for it's somewhat redundant with the @mtasurace.
The @code{mbsinit} function determines whether the state object pointed
to by @var{ps} is in the initial state. If @var{ps} is a null pointer or
the object is in the initial state the return value is nonzero. Otherwise
@@ -559,6 +567,14 @@ that is beyond the range @math{0} to @math{127}.
@comment wchar.h
@comment ISO
@deftypefun wint_t btowc (int @var{c})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Calls btowc_fct or __fct; reads from locale, and from the
+@c get_gconv_fcts result multiple times. get_gconv_fcts calls
+@c __wcsmbs_load_conv to initialize the ctype if it's null.
+@c wcsmbs_load_conv takes a non-recursive wrlock before allocating
+@c memory for the fcts structure, initializing it, and then storing it
+@c in the locale object. The initialization involves dlopening and a
+@c lot more.
The @code{btowc} function (``byte to wide character'') converts a valid
single byte character @var{c} in the initial shift state into the wide
character equivalent using the conversion rules from the currently
@@ -615,6 +631,7 @@ There is also a function for the conversion in the other direction.
@comment wchar.h
@comment ISO
@deftypefun int wctob (wint_t @var{c})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{wctob} function (``wide character to byte'') takes as the
parameter a valid wide character. If the multibyte representation for
this character in the initial state is exactly one byte long, the return
@@ -634,6 +651,7 @@ and they also do not require it to be in the initial state.
@comment wchar.h
@comment ISO
@deftypefun size_t mbrtowc (wchar_t *restrict @var{pwc}, const char *restrict @var{s}, size_t @var{n}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbrtowc/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
@cindex stateful
The @code{mbrtowc} function (``multibyte restartable to wide
character'') converts the next multibyte character in the string pointed
@@ -728,6 +746,7 @@ function that does part of the work.
@comment wchar.h
@comment ISO
@deftypefun size_t mbrlen (const char *restrict @var{s}, size_t @var{n}, mbstate_t *@var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbrlen/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{mbrlen} function (``multibyte restartable length'') computes
the number of at most @var{n} bytes starting at @var{s}, which form the
next valid and complete multibyte character.
@@ -811,6 +830,50 @@ doing the work twice.
@comment wchar.h
@comment ISO
@deftypefun size_t wcrtomb (char *restrict @var{s}, wchar_t @var{wc}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcrtomb/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c wcrtomb uses a static, non-thread-local unguarded state variable when
+@c PS is NULL. When a state is passed in, and it's not used
+@c concurrently in other threads, this function behaves safely as long
+@c as gconv modules don't bring MT safety issues of their own.
+@c Attempting to load gconv modules or to build conversion chains in
+@c signal handlers may encounter gconv databases or caches in a
+@c partially-updated state, and asynchronous cancellation may leave them
+@c in such states, besides leaking the lock that guards them.
+@c get_gconv_fcts ok
+@c wcsmbs_load_conv ok
+@c norm_add_slashes ok
+@c wcsmbs_getfct ok
+@c gconv_find_transform ok
+@c gconv_read_conf (libc_once)
+@c gconv_lookup_cache ok
+@c find_module_idx ok
+@c find_module ok
+@c gconv_find_shlib (ok)
+@c ->init_fct (assumed ok)
+@c gconv_get_builtin_trans ok
+@c gconv_release_step ok
+@c do_lookup_alias ok
+@c find_derivation ok
+@c derivation_lookup ok
+@c increment_counter ok
+@c gconv_find_shlib ok
+@c step->init_fct (assumed ok)
+@c gen_steps ok
+@c gconv_find_shlib ok
+@c dlopen (presumed ok)
+@c dlsym (presumed ok)
+@c step->init_fct (assumed ok)
+@c step->end_fct (assumed ok)
+@c gconv_get_builtin_trans ok
+@c gconv_release_step ok
+@c add_derivation ok
+@c gconv_close_transform ok
+@c gconv_release_step ok
+@c step->end_fct (assumed ok)
+@c gconv_release_shlib ok
+@c dlclose (presumed ok)
+@c gconv_release_cache ok
+@c ->tomb->__fct (assumed ok)
The @code{wcrtomb} function (``wide character restartable to
multibyte'') converts a single wide character into a multibyte string
corresponding to that wide character.
@@ -955,6 +1018,7 @@ extensions that can help in some important situations.
@comment wchar.h
@comment ISO
@deftypefun size_t mbsrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbsrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{mbsrtowcs} function (``multibyte string restartable to wide
character string'') converts a NUL-terminated multibyte character
string at @code{*@var{src}} into an equivalent wide character string,
@@ -1039,6 +1103,7 @@ length and passing this length to the function.
@comment wchar.h
@comment ISO
@deftypefun size_t wcsrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcsrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{wcsrtombs} function (``wide character string restartable to
multibyte string'') converts the NUL-terminated wide character string at
@code{*@var{src}} into an equivalent multibyte character string and
@@ -1084,6 +1149,7 @@ array size (the @var{len} parameter).
@comment wchar.h
@comment GNU
@deftypefun size_t mbsnrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{nmc}, size_t @var{len}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbsnrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{mbsnrtowcs} function is very similar to the @code{mbsrtowcs}
function. All the parameters are the same except for @var{nmc}, which is
new. The return value is the same as for @code{mbsrtowcs}.
@@ -1136,6 +1202,7 @@ of the given buffer, there is no problem with altering the state.
@comment wchar.h
@comment GNU
@deftypefun size_t wcsnrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{nwc}, size_t @var{len}, mbstate_t *restrict @var{ps})
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcsnrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{wcsnrtombs} function implements the conversion from wide
character strings to multibyte character strings. It is similar to
@code{wcsrtombs} but, just like @code{mbsnrtowcs}, it takes an extra
@@ -1280,6 +1347,7 @@ conversion functions.}
@comment stdlib.h
@comment ISO
@deftypefun int mbtowc (wchar_t *restrict @var{result}, const char *restrict @var{string}, size_t @var{size})
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{mbtowc} (``multibyte to wide character'') function when called
with non-null @var{string} converts the first multibyte character
beginning at @var{string} to its corresponding wide character code. It
@@ -1314,6 +1382,7 @@ shift state. @xref{Shift State}.
@comment stdlib.h
@comment ISO
@deftypefun int wctomb (char *@var{string}, wchar_t @var{wchar})
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{wctomb} (``wide character to multibyte'') function converts
the wide character code @var{wchar} to its corresponding multibyte
character sequence, and stores the result in bytes starting at
@@ -1353,6 +1422,7 @@ terms of @code{mbtowc}.
@comment stdlib.h
@comment ISO
@deftypefun int mblen (const char *@var{string}, size_t @var{size})
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{mblen} function with a non-null @var{string} argument returns
the number of bytes that make up the multibyte character beginning at
@var{string}, never examining more than @var{size} bytes. (The idea is
@@ -1391,6 +1461,9 @@ suffer from the same problems as their reentrant counterparts from
@comment stdlib.h
@comment ISO
@deftypefun size_t mbstowcs (wchar_t *@var{wstring}, const char *@var{string}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Odd... Although this was supposed to be non-reentrant, the internal
+@c state is not a static buffer, but an automatic variable.
The @code{mbstowcs} (``multibyte string to wide character string'')
function converts the null-terminated string of multibyte characters
@var{string} to an array of wide character codes, storing not more than
@@ -1431,6 +1504,7 @@ mbstowcs_alloc (const char *string)
@comment stdlib.h
@comment ISO
@deftypefun size_t wcstombs (char *@var{string}, const wchar_t *@var{wstring}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
The @code{wcstombs} (``wide character string to multibyte string'')
function converts the null-terminated wide character array @var{wstring}
into a string containing multibyte characters, storing not more than
@@ -1618,6 +1692,16 @@ The first step is the function to create a handle.
@comment iconv.h
@comment XPG2
@deftypefun iconv_t iconv_open (const char *@var{tocode}, const char *@var{fromcode})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Calls malloc if tocode and/or fromcode are too big for alloca. Calls
+@c strip and upstr on both, then gconv_open. strip and upstr call
+@c isalnum_l and toupper_l with the C locale. gconv_open may MT-safely
+@c tokenize toset, replace unspecified codesets with the current locale
+@c (possibly two different accesses), and finally it calls
+@c gconv_find_transform and initializes the gconv_t result with all the
+@c steps in the conversion sequence, running each one's initializer,
+@c destructing and releasing them all if anything fails.
+
The @code{iconv_open} function has to be used before starting a
conversion. The two parameters this function takes determine the
source and destination character set for the conversion, and if the
@@ -1682,6 +1766,12 @@ conversion is not needed anymore.
@comment iconv.h
@comment XPG2
@deftypefun int iconv_close (iconv_t @var{cd})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Calls gconv_close to destruct and release each of the conversion
+@c steps, release the gconv_t object, then call gconv_close_transform.
+@c Access to the gconv_t object is not guarded, but calling iconv_close
+@c concurrently with any other use is undefined.
+
The @code{iconv_close} function frees all resources associated with the
handle @var{cd}, which must have been returned by a successful call to
the @code{iconv_open} function.
@@ -1708,6 +1798,10 @@ even file to file can be implemented on top of it.
@comment iconv.h
@comment XPG2
@deftypefun size_t iconv (iconv_t @var{cd}, char **@var{inbuf}, size_t *@var{inbytesleft}, char **@var{outbuf}, size_t *@var{outbytesleft})
+@safety{@prelim{}@mtsafe{@mtsrace{:cd}}@assafe{}@acunsafe{@acucorrupt{}}}
+@c Without guarding access to the iconv_t object pointed to by cd, call
+@c the conversion function to convert inbuf or flush the internal
+@c conversion state.
@cindex stateful
The @code{iconv} function converts the text in the input buffer
according to the rules associated with the descriptor @var{cd} and
diff --git a/libc/manual/check-safety.sh b/libc/manual/check-safety.sh
new file mode 100644
index 000000000..701624d3b
--- /dev/null
+++ b/libc/manual/check-safety.sh
@@ -0,0 +1,119 @@
+#! /bin/sh
+
+# Copyright 2014 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
+# <http://www.gnu.org/licenses/>.
+
+
+# Check that the @safety notes are self-consistent, i.e., that they're
+# in proper order (mt then as then ac), that remarks appear within
+# corresponding sections (mt within mt, etc), that unsafety always has
+# an explicit reason and when there's a reason for unsafety it's not
+# safe, and that there aren't duplicates remarks.
+
+
+success=:
+
+# If no arguments are given, take all *.texi files in the current directory.
+test $# != 0 || set *.texi
+
+# Check that all safety remarks have entries for all of MT, AS and AC,
+# in this order, with an optional prelim note before them.
+grep -n '^@safety' "$@" |
+grep -v ':@safety{\(@prelim{}\)\?@mt\(un\)\?safe{.*}'\
+'@as\(un\)\?safe{.*}@ac\(un\)\?safe{.*}}' &&
+success=false
+
+# Check that @mt-started notes appear within @mtsafe or @mtunsafe,
+# that @as-started notes appear within @assafe or @asunsafe, and that
+# @ac-started notes appear within @acsafe or @acunsafe. Also check
+# that @mt, @as and @ac are followed by an s (for safe) or u (for
+# unsafe), but let @mt have as, ac or asc before [su], and let @as
+# have a c (for cancel) before [su]. Also make sure blanks separate
+# each of the annotations.
+grep -n '^@safety' "$@" |
+grep -v ':@safety{\(@prelim{}\)\?'\
+'@mt\(un\)\?safe{\(@mt\(asc\?\|ac\)\?[su][^ ]*}\)\?'\
+'\( @mt\(asc\?\|ac\)\?[su][^ ]*}\)*}'\
+'@as\(un\)\?safe{\(@asc\?[su][^ ]*}\)\?'\
+'\( @asc\?[su][^ ]*}\)*}'\
+'@ac\(un\)\?safe{\(@ac[su][^ ]*}\)\?'\
+'\( @ac[su][^ ]*}\)*}}' &&
+success=false
+
+# Make sure safety lines marked as @mtsafe do not contain any
+# MT-Unsafe remark; that would be @mtu, but there could be as, ac or
+# asc between mt and u.
+grep -n '^@safety.*@mtsafe' "$@" |
+grep '@mt\(asc\?\|ac\)?u' "$@" &&
+success=false
+
+# Make sure @mtunsafe lines contain at least one @mtu remark (with
+# optional as, ac or asc between mt and u).
+grep -n '^@safety.*@mtunsafe' "$@" |
+grep -v '@mtunsafe{.*@mt\(asc\?\|ac\)\?u' &&
+success=false
+
+# Make sure safety lines marked as @assafe do not contain any AS-Unsafe
+# remark, which could be @asu or @mtasu note (with an optional c
+# between as and u in both cases).
+grep -n '^@safety.*@assafe' "$@" |
+grep '@\(mt\)\?asc\?u' &&
+success=false
+
+# Make sure @asunsafe lines contain at least one @asu remark (which
+# could be @ascu, or @mtasu or even @mtascu).
+grep -n '^@safety.*@asunsafe' "$@" |
+grep -v '@mtasc\?u.*@asunsafe\|@asunsafe{.*@asc\?u' &&
+success=false
+
+# Make sure safety lines marked as @acsafe do not contain any
+# AC-Unsafe remark, which could be @acu, @ascu or even @mtacu or
+# @mtascu.
+grep -n '^@safety.*@acsafe' "$@" |
+grep '@\(mt\)\?as\?cu' &&
+success=false
+
+# Make sure @acunsafe lines contain at least one @acu remark (possibly
+# implied by @ascu, @mtacu or @mtascu).
+grep -n '^@safety.*@acunsafe' "$@" |
+grep -v '@\(mtas\?\|as\)cu.*@acunsafe\|@acunsafe{.*@acu' &&
+success=false
+
+# Make sure there aren't duplicate remarks in the same safety note.
+grep -n '^@safety' "$@" |
+grep '[^:]\(@\(mt\|a[sc]\)[^ {]*{[^ ]*}\).*[^:]\1' &&
+success=false
+
+# Check that comments containing safety remarks do not contain {}s,
+# that all @mt remarks appear before @as remarks, that in turn appear
+# before @ac remarks, all properly blank-separated, and that an
+# optional comment about exclusions is between []s at the end of the
+# line.
+grep -n '^@c \+[^@ ]\+\( dup\)\?'\
+'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" |
+grep -v ':@c *[^@{}]*\( @mt[^ {}]*\)*'\
+'\( @as[^ {}]*\)*\( @ac[^ {}]*\)*\( \[.*\]\)\?$' &&
+success=false
+
+# Check that comments containing safety remarks do not contain
+# duplicate remarks.
+grep -n '^@c \+[^@ ]\+\( dup\)\?'\
+'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" |
+grep '[^:]\(@\(mt\|a[sc]\)[^ ]*\) \(.*[^:]\)\?\1\($\| \)' &&
+success=false
+
+$success
diff --git a/libc/manual/conf.texi b/libc/manual/conf.texi
index c720063b8..82a876677 100644
--- a/libc/manual/conf.texi
+++ b/libc/manual/conf.texi
@@ -288,6 +288,17 @@ constants are declared in the header file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun {long int} sysconf (int @var{parameter})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c Some parts of the implementation open /proc and /sys files and dirs
+@c to collect system details, using fd and stream I/O depending on the
+@c case. _SC_TZNAME_MAX calls __tzname_max, that (while holding a lock)
+@c calls tzset_internal, that calls getenv if it's called the first
+@c time; there are free and strdup calls in there too. The returned max
+@c value may change over time for TZNAME_MAX, depending on selected
+@c timezones; NPROCS, NPROCS_CONF, PHYS_PAGES, AVPHYS_PAGES,
+@c NGROUPS_MAX, SIGQUEUE_MAX, depending on variable values read from
+@c /proc at each call, and from rlimit-obtained values CHILD_MAX,
+@c OPEN_MAX, ARG_MAX, SIGQUEUE_MAX.
This function is used to inquire about runtime system parameters. The
@var{parameter} argument should be one of the @samp{_SC_} symbols listed
below.
@@ -1348,6 +1359,11 @@ argument are declared in the header file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun {long int} pathconf (const char *@var{filename}, int @var{parameter})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c When __statfs_link_max finds an ext* filesystem, it may read
+@c /proc/mounts or similar as a mntent stream.
+@c __statfs_chown_restricted may read from
+@c /proc/sys/fs/xfs/restrict_chown as a file descriptor.
This function is used to inquire about the limits that apply to
the file named @var{filename}.
@@ -1375,6 +1391,8 @@ support the @var{parameter} for the specific file.
@comment unistd.h
@comment POSIX.1
@deftypefun {long int} fpathconf (int @var{filedes}, int @var{parameter})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Same caveats as pathconf.
This is just like @code{pathconf} except that an open file descriptor
is used to specify the file for which information is requested, instead
of a file name.
@@ -1624,6 +1642,7 @@ system with the function @code{confstr}:
@comment unistd.h
@comment POSIX.2
@deftypefun size_t confstr (int @var{parameter}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function reads the value of a string-valued system parameter,
storing the string into @var{len} bytes of memory space starting at
@var{buf}. The @var{parameter} argument should be one of the
diff --git a/libc/manual/contrib.texi b/libc/manual/contrib.texi
index 811636716..9c6cb3ed3 100644
--- a/libc/manual/contrib.texi
+++ b/libc/manual/contrib.texi
@@ -12,7 +12,8 @@ order.
@itemize @bullet
@item
-Ryan S. Arnold for his improvements for Linux on PowerPC.
+Ryan S. Arnold for his improvements for Linux on PowerPC and his direction
+as FSF Project Steward for @theglibc{}.
@item
Miles Bader for writing the @code{argp} argument-parsing package, and the
@@ -29,7 +30,8 @@ Stephen R. van den Berg for contributing a highly-optimized
@code{strstr} function.
@item
-Ondrej Bilka for contributing optimized string routines for x64.
+Ondrej Bilka for contributing optimized string routines for x64 and various
+fixes.
@item
Eric Blake for adding O(n) implementations of @code{memmem},
@@ -84,6 +86,9 @@ Paul Eggert for the @code{mktime} function and for his direction as
part of @theglibc{} steering committee.
@item
+Steve Ellcey for various fixes.
+
+@item
Tulio Magno Quites Machado Filho for adding a new class of installed
headers for low-level platform-specific functionality and one such for
PowerPC.
@@ -175,6 +180,9 @@ functions @code{malloc}, @code{realloc} and @code{free} and related
code.
@item
+Chris Leonard for various fixes and enhancements to localedata.
+
+@item
Hongjiu Lu for providing the support for a Linux 32-bit runtime
environment under x86-64 (x32), for porting to Linux on IA64, for
improved string functions, a framework for testing IFUNC
@@ -193,7 +201,11 @@ Greg McGary for adding runtime support for bounds checking.
@item
Roland McGrath for writing most of @theglibc{} originally, for his
work on the Hurd port, his direction as part of @theglibc{} steering
-committee, and for many bug fixes and reviewing of contributions.
+committee and as FSF Project Steward for @theglibc{}, and for many bug
+fixes and reviewing of contributions.
+
+@item
+Allan McRae for various fixes.
@item
Jason Merrill for the port to the Sequent Symmetry running Dynix
@@ -228,21 +240,25 @@ implementations for PowerPC.
Joseph S. Myers for numerous bug fixes for the libm functions, for
his maintainership of the ARM and MIPS architectures, improving
cross-compilation and cross-testing of @theglibc{}, expanded
-coverage of conformtest, and merging the ports/ subdirectory
-into the @glibcadj{} main repository.
+coverage of conformtest, merging the ports/ subdirectory
+into the @glibcadj{} main repository and his direction as FSF Project
+Steward for @theglibc{}.
@item
-Will Newton for contributing an optimized memcpy for ARM NEON and
-VFP chips.
+Will Newton for contributing some optimized string functions and pointer
+encryption support for ARM and various fixes.
@item
-Carlos O'Donell for his maintainership of the HPPA architecture and
-maintaining @theglibc{} web pages.
+Carlos O'Donell for his maintainership of the HPPA architecture, for
+maintaining @theglibc{} web pages and wiki, for his direction as FSF
+Project Steward for @theglibc{} and various bug fixes.
@item
Alexandre Oliva for adding TLS descriptors for LD and GD on x86 and
x86-64, for the am33 port, for completing the MIPS n64/n32/o32 multilib
-port, and for various fixes.
+port, for thread-safety, async-signal safety and async-cancellation
+safety documentation in the manual, for his direction as FSF Project
+Maintainer and for various fixes.
@item
Paul Pluzhnikov for various fixes.
diff --git a/libc/manual/crypt.texi b/libc/manual/crypt.texi
index 9c65b9535..fd007cfa6 100644
--- a/libc/manual/crypt.texi
+++ b/libc/manual/crypt.texi
@@ -99,6 +99,13 @@ in a convenient way.
@comment unistd.h
@comment BSD
@deftypefun {char *} getpass (const char *@var{prompt})
+@safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}}
+@c This function will attempt to create a stream for terminal I/O, but
+@c will fallback to stdio/stderr. It attempts to change the terminal
+@c mode in a thread-unsafe way, write out the prompt, read the password,
+@c then restore the terminal mode. It has a cleanup to close the stream
+@c in case of (synchronous) cancellation, but not to restore the
+@c terminal mode.
@code{getpass} outputs @var{prompt}, then reads a string in from the
terminal without echoing it. It tries to connect to the real terminal,
@@ -134,6 +141,13 @@ The substitute takes the same parameters as @code{getline}
@comment crypt.h
@comment BSD, SVID
@deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt})
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
+@c Besides the obvious problem of returning a pointer into static
+@c storage, the DES initializer takes an internal lock with the usual
+@c set of problems for AS- and AC-Safety. The FIPS mode checker and the
+@c NSS implementations of may leak file descriptors if canceled. The
+@c The MD5, SHA256 and SHA512 implementations will malloc on long keys,
+@c and NSS relies on dlopening, which brings about another can of worms.
The @code{crypt} function takes a password, @var{key}, as a string, and
a @var{salt} character array which is described below, and returns a
@@ -195,6 +209,9 @@ for a password and prints ``Access granted.'' if the user types
@comment crypt.h
@comment GNU
@deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
+@c Compared with crypt, this function fixes the @mtasurace:crypt
+@c problem, but nothing else.
The @code{crypt_r} function does the same thing as @code{crypt}, but
takes an extra parameter which includes space for its result (among
@@ -241,6 +258,11 @@ specifies the unused bits.
@comment crypt.h
@comment BSD, SVID
@deftypefun void setkey (const char *@var{key})
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
+@c The static buffer stores the key, making it fundamentally
+@c thread-unsafe. The locking issues are only in the initialization
+@c path; cancelling the initialization will leave the lock held, it
+@c would otherwise repeat the initialization on the next call.
The @code{setkey} function sets an internal data structure to be an
expanded form of @var{key}. @var{key} is specified as an array of 64
@@ -252,6 +274,8 @@ parity.
@comment crypt.h
@comment BSD, SVID
@deftypefun void encrypt (char *@var{block}, int @var{edflag})
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
+@c Same issues as setkey.
The @code{encrypt} function encrypts @var{block} if
@var{edflag} is 0, otherwise it decrypts @var{block}, using a key
@@ -265,9 +289,11 @@ stored in a @code{char}, but there are no parity bits in @var{block}.
@comment crypt.h
@comment GNU
@deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data})
+@c @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
@comment crypt.h
@comment GNU
@deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
These are reentrant versions of @code{setkey} and @code{encrypt}. The
only difference is the extra parameter, which stores the expanded
@@ -282,6 +308,7 @@ defined in @file{crypt.h}.
@comment rpc/des_crypt.h
@comment SUNRPC
@deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{ecb_crypt} encrypts or decrypts one or more blocks
using DES. Each block is encrypted independently.
@@ -356,6 +383,7 @@ is not a multiple of 8 or @var{len} is larger than @code{DES_MAXDATA}.
@comment rpc/des_crypt.h
@comment SUNRPC
@deftypefun int DES_FAILED (int @var{err})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns 1 if @var{err} is a `success' result code from
@code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise.
@end deftypefun
@@ -363,6 +391,7 @@ This macro returns 1 if @var{err} is a `success' result code from
@comment rpc/des_crypt.h
@comment SUNRPC
@deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode}, char *@var{ivec})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{cbc_crypt} encrypts or decrypts one or more blocks
using DES in Cipher Block Chaining mode.
@@ -389,6 +418,7 @@ Otherwise, all the parameters are similar to those for @code{ecb_crypt}.
@comment rpc/des_crypt.h
@comment SUNRPC
@deftypefun void des_setparity (char *@var{key})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{des_setparity} changes the 64-bit @var{key}, stored
packed in 8-bit bytes, to have odd parity by altering the low bits of
diff --git a/libc/manual/ctype.texi b/libc/manual/ctype.texi
index 3d13571ac..2d73d4e72 100644
--- a/libc/manual/ctype.texi
+++ b/libc/manual/ctype.texi
@@ -66,6 +66,16 @@ These functions are declared in the header file @file{ctype.h}.
@comment ctype.h
@comment ISO
@deftypefun int islower (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c The is* macros call __ctype_b_loc to get the ctype array from the
+@c current locale, and then index it by c. __ctype_b_loc reads from
+@c thread-local memory the (indirect) pointer to the ctype array, which
+@c may involve one word access to the global locale object, if that's
+@c the active locale for the thread, and the array, being part of the
+@c locale data, is undeletable, so there's no thread-safety issue. We
+@c might want to mark these with @mtslocale to flag to callers that
+@c changing locales might affect them, even if not these simpler
+@c functions.
Returns true if @var{c} is a lower-case letter. The letter need not be
from the Latin alphabet, any alphabet representable is valid.
@end deftypefun
@@ -74,6 +84,7 @@ from the Latin alphabet, any alphabet representable is valid.
@comment ctype.h
@comment ISO
@deftypefun int isupper (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is an upper-case letter. The letter need not be
from the Latin alphabet, any alphabet representable is valid.
@end deftypefun
@@ -82,6 +93,7 @@ from the Latin alphabet, any alphabet representable is valid.
@comment ctype.h
@comment ISO
@deftypefun int isalpha (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is an alphabetic character (a letter). If
@code{islower} or @code{isupper} is true of a character, then
@code{isalpha} is also true.
@@ -97,6 +109,7 @@ additional characters.
@comment ctype.h
@comment ISO
@deftypefun int isdigit (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a decimal digit (@samp{0} through @samp{9}).
@end deftypefun
@@ -104,6 +117,7 @@ Returns true if @var{c} is a decimal digit (@samp{0} through @samp{9}).
@comment ctype.h
@comment ISO
@deftypefun int isalnum (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is an alphanumeric character (a letter or
number); in other words, if either @code{isalpha} or @code{isdigit} is
true of a character, then @code{isalnum} is also true.
@@ -113,6 +127,7 @@ true of a character, then @code{isalnum} is also true.
@comment ctype.h
@comment ISO
@deftypefun int isxdigit (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a hexadecimal digit.
Hexadecimal digits include the normal decimal digits @samp{0} through
@samp{9} and the letters @samp{A} through @samp{F} and
@@ -123,6 +138,7 @@ Hexadecimal digits include the normal decimal digits @samp{0} through
@comment ctype.h
@comment ISO
@deftypefun int ispunct (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a punctuation character.
This means any printing character that is not alphanumeric or a space
character.
@@ -132,6 +148,7 @@ character.
@comment ctype.h
@comment ISO
@deftypefun int isspace (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a @dfn{whitespace} character. In the standard
@code{"C"} locale, @code{isspace} returns true for only the standard
whitespace characters:
@@ -161,6 +178,7 @@ vertical tab
@comment ctype.h
@comment ISO
@deftypefun int isblank (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a blank character; that is, a space or a tab.
This function was originally a GNU extension, but was added in @w{ISO C99}.
@end deftypefun
@@ -169,6 +187,7 @@ This function was originally a GNU extension, but was added in @w{ISO C99}.
@comment ctype.h
@comment ISO
@deftypefun int isgraph (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a graphic character; that is, a character
that has a glyph associated with it. The whitespace characters are not
considered graphic.
@@ -178,6 +197,7 @@ considered graphic.
@comment ctype.h
@comment ISO
@deftypefun int isprint (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a printing character. Printing characters
include all the graphic characters, plus the space (@samp{ }) character.
@end deftypefun
@@ -186,6 +206,7 @@ include all the graphic characters, plus the space (@samp{ }) character.
@comment ctype.h
@comment ISO
@deftypefun int iscntrl (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a control character (that is, a character that
is not a printing character).
@end deftypefun
@@ -194,6 +215,7 @@ is not a printing character).
@comment ctype.h
@comment SVID, BSD
@deftypefun int isascii (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns true if @var{c} is a 7-bit @code{unsigned char} value that fits
into the US/UK ASCII character set. This function is a BSD extension
and is also an SVID extension.
@@ -227,6 +249,10 @@ These functions are declared in the header file @file{ctype.h}.
@comment ctype.h
@comment ISO
@deftypefun int tolower (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c The to* macros/functions call different functions that use different
+@c arrays than those of__ctype_b_loc, but the access patterns and
+@c thus safety guarantees are the same.
If @var{c} is an upper-case letter, @code{tolower} returns the corresponding
lower-case letter. If @var{c} is not an upper-case letter,
@var{c} is returned unchanged.
@@ -235,6 +261,7 @@ lower-case letter. If @var{c} is not an upper-case letter,
@comment ctype.h
@comment ISO
@deftypefun int toupper (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @var{c} is a lower-case letter, @code{toupper} returns the corresponding
upper-case letter. Otherwise @var{c} is returned unchanged.
@end deftypefun
@@ -242,6 +269,7 @@ upper-case letter. Otherwise @var{c} is returned unchanged.
@comment ctype.h
@comment SVID, BSD
@deftypefun int toascii (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function converts @var{c} to a 7-bit @code{unsigned char} value
that fits into the US/UK ASCII character set, by clearing the high-order
bits. This function is a BSD extension and is also an SVID extension.
@@ -250,6 +278,7 @@ bits. This function is a BSD extension and is also an SVID extension.
@comment ctype.h
@comment SVID
@deftypefun int _tolower (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is identical to @code{tolower}, and is provided for compatibility
with the SVID. @xref{SVID}.@refill
@end deftypefun
@@ -257,6 +286,7 @@ with the SVID. @xref{SVID}.@refill
@comment ctype.h
@comment SVID
@deftypefun int _toupper (int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is identical to @code{toupper}, and is provided for compatibility
with the SVID.
@end deftypefun
@@ -303,6 +333,18 @@ This type is defined in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun wctype_t wctype (const char *@var{property})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Although the source code of wctype contains multiple references to
+@c the locale, that could each reference different locale_data objects
+@c should the global locale object change while active, the compiler can
+@c and does combine them all into a single dereference that resolves
+@c once to the LCTYPE locale object used throughout the function, so it
+@c is safe in (optimized) practice, if not in theory, even when the
+@c locale changes. Ideally we'd explicitly save the resolved
+@c locale_data object to make it visibly safe instead of safe only under
+@c compiler optimizations, but given the decision that setlocale is
+@c MT-Unsafe, all this would afford us would be the ability to not mark
+@c this function with @mtslocale.
The @code{wctype} returns a value representing a class of wide
characters which is identified by the string @var{property}. Beside
some standard properties each locale can define its own ones. In case
@@ -331,6 +373,8 @@ the @w{ISO C} standard defines a completely new function.
@comment wctype.h
@comment ISO
@deftypefun int iswctype (wint_t @var{wc}, wctype_t @var{desc})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c The compressed lookup table returned by wctype is read-only.
This function returns a nonzero value if @var{wc} is in the character
class specified by @var{desc}. @var{desc} must previously be returned
by a successful call to @code{wctype}.
@@ -350,6 +394,16 @@ standard classes.
@comment wctype.h
@comment ISO
@deftypefun int iswalnum (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c The implicit wctype call in the isw* functions is actually an
+@c optimized version because the category has a known offset, but the
+@c wctype is equally safe when optimized, unsafe with changing locales
+@c if not optimized (thus @mtslocale). Since it's not a macro, we
+@c always optimize, and the locale can't change in any MT-Safe way, it's
+@c fine. The test whether wc is ASCII to use the non-wide is*
+@c macro/function doesn't bring any other safety issues: the test does
+@c not depend on the locale, and each path after the decision resolves
+@c the locale object only once.
This function returns a nonzero value if @var{wc} is an alphanumeric
character (a letter or number); in other words, if either @code{iswalpha}
or @code{iswdigit} is true of a character, then @code{iswalnum} is also
@@ -370,6 +424,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswalpha (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is an alphabetic character (a letter). If
@code{iswlower} or @code{iswupper} is true of a character, then
@code{iswalpha} is also true.
@@ -394,6 +449,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswcntrl (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a control character (that is, a character that
is not a printing character).
@@ -412,6 +468,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswdigit (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a digit (e.g., @samp{0} through @samp{9}).
Please note that this function does not only return a nonzero value for
@emph{decimal} digits, but for all kinds of digits. A consequence is
@@ -442,6 +499,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswgraph (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a graphic character; that is, a character
that has a glyph associated with it. The whitespace characters are not
considered graphic.
@@ -461,6 +519,7 @@ It is declared in @file{wctype.h}.
@comment ctype.h
@comment ISO
@deftypefun int iswlower (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a lower-case letter. The letter need not be
from the Latin alphabet, any alphabet representable is valid.
@@ -479,6 +538,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswprint (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a printing character. Printing characters
include all the graphic characters, plus the space (@samp{ }) character.
@@ -497,6 +557,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswpunct (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a punctuation character.
This means any printing character that is not alphanumeric or a space
character.
@@ -516,6 +577,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswspace (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a @dfn{whitespace} character. In the standard
@code{"C"} locale, @code{iswspace} returns true for only the standard
whitespace characters:
@@ -555,6 +617,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswupper (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is an upper-case letter. The letter need not be
from the Latin alphabet, any alphabet representable is valid.
@@ -573,6 +636,7 @@ It is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun int iswxdigit (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a hexadecimal digit.
Hexadecimal digits include the normal decimal digits @samp{0} through
@samp{9} and the letters @samp{A} through @samp{F} and
@@ -597,6 +661,7 @@ characters as well.
@comment wctype.h
@comment ISO
@deftypefun int iswblank (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
Returns true if @var{wc} is a blank character; that is, a space or a tab.
This function was originally a GNU extension, but was added in @w{ISO C99}.
It is declared in @file{wchar.h}.
@@ -691,6 +756,8 @@ This type is defined in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun wctrans_t wctrans (const char *@var{property})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Similar implementation, same caveats as wctype.
The @code{wctrans} function has to be used to find out whether a named
mapping is defined in the current locale selected for the
@code{LC_CTYPE} category. If the returned value is non-zero, you can use
@@ -713,6 +780,8 @@ These functions are declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun wint_t towctrans (wint_t @var{wc}, wctrans_t @var{desc})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Same caveats as iswctype.
@code{towctrans} maps the input character @var{wc}
according to the rules of the mapping for which @var{desc} is a
descriptor, and returns the value it finds. @var{desc} must be
@@ -730,6 +799,9 @@ for them.
@comment wctype.h
@comment ISO
@deftypefun wint_t towlower (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Same caveats as iswalnum, just using a wctrans rather than a wctype
+@c table.
If @var{wc} is an upper-case letter, @code{towlower} returns the corresponding
lower-case letter. If @var{wc} is not an upper-case letter,
@var{wc} is returned unchanged.
@@ -749,6 +821,7 @@ This function is declared in @file{wctype.h}.
@comment wctype.h
@comment ISO
@deftypefun wint_t towupper (wint_t @var{wc})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
If @var{wc} is a lower-case letter, @code{towupper} returns the corresponding
upper-case letter. Otherwise @var{wc} is returned unchanged.
diff --git a/libc/manual/debug.texi b/libc/manual/debug.texi
index 1db9c180f..25492c329 100644
--- a/libc/manual/debug.texi
+++ b/libc/manual/debug.texi
@@ -36,6 +36,16 @@ and manipulate backtraces of the current thread.
@comment execinfo.h
@comment GNU
@deftypefun int backtrace (void **@var{buffer}, int @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{} @ascuheap{} @ascudlopen{} @ascuplugin{} @asulock{}}@acunsafe{@acuinit{} @acsmem{} @aculock{} @acsfd{}}}
+@c The generic implementation just does pointer chasing within the local
+@c stack, without any guarantees that this will handle signal frames
+@c correctly, so it's AS-Unsafe to begin with. However, most (all?)
+@c arches defer to libgcc_s's _Unwind_* implementation, dlopening
+@c libgcc_s.so to that end except in a static version of libc.
+@c libgcc_s's implementation may in turn defer to libunwind. We can't
+@c assume those implementations are AS- or AC-safe, but even if we
+@c could, our own initialization path isn't, and libgcc's implementation
+@c calls malloc and performs internal locking, so...
The @code{backtrace} function obtains a backtrace for the current
thread, as a list of pointers, and places the information into
@var{buffer}. The argument @var{size} should be the number of
@@ -56,6 +66,17 @@ interpreting the stack contents correctly.
@comment execinfo.h
@comment GNU
@deftypefun {char **} backtrace_symbols (void *const *@var{buffer}, int @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @aculock{}}}
+@c Collects info returned by _dl_addr in an auto array, allocates memory
+@c for the whole return buffer with malloc then sprintfs into it storing
+@c pointers to the strings into the array entries in the buffer.
+@c _dl_addr takes the recursive dl_load_lock then calls
+@c _dl_find_dso_for_object and determine_info.
+@c _dl_find_dso_for_object calls _dl-addr_inside_object.
+@c All of them are safe as long as the lock is held.
+@c @asucorrupt? It doesn't look like the dynamic loader's data
+@c structures could be in an inconsistent state that would cause
+@c malfunction here.
The @code{backtrace_symbols} function translates the information
obtained from the @code{backtrace} function into an array of strings.
The argument @var{buffer} should be a pointer to an array of addresses
@@ -88,6 +109,11 @@ cannot be obtained.
@comment execinfo.h
@comment GNU
@deftypefun void backtrace_symbols_fd (void *const *@var{buffer}, int @var{size}, int @var{fd})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+@c Single loop of _dl_addr over addresses, collecting info into an iovec
+@c written out with a writev call per iteration. Addresses and offsets
+@c are converted to hex in auto buffers, so the only potential issue
+@c here is leaking the dl lock in case of cancellation.
The @code{backtrace_symbols_fd} function performs the same translation
as the function @code{backtrace_symbols} function. Instead of returning
the strings to the caller, it writes the strings to the file descriptor
diff --git a/libc/manual/errno.texi b/libc/manual/errno.texi
index b1bfbe937..6a691fc96 100644
--- a/libc/manual/errno.texi
+++ b/libc/manual/errno.texi
@@ -1293,6 +1293,9 @@ name of the program that encountered the error.
@comment string.h
@comment ISO
@deftypefun {char *} strerror (int @var{errnum})
+@safety{@prelim{}@mtunsafe{@mtasurace{:strerror}}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{}}}
+@c Calls strerror_r with a static buffer allocated with malloc on the
+@c first use.
The @code{strerror} function maps the error code (@pxref{Checking for
Errors}) specified by the @var{errnum} argument to a descriptive error
message string. The return value is a pointer to this string.
@@ -1310,6 +1313,7 @@ The function @code{strerror} is declared in @file{string.h}.
@comment string.h
@comment GNU
@deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuintl{}}@acunsafe{}}
The @code{strerror_r} function works like @code{strerror} but instead of
returning the error message in a statically allocated buffer shared by
all threads in the process, it returns a private copy for the
@@ -1331,6 +1335,10 @@ This function @code{strerror_r} is a GNU extension and it is declared in
@comment stdio.h
@comment ISO
@deftypefun void perror (const char *@var{message})
+@safety{@prelim{}@mtsafe{@mtasurace{:stderr}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Besides strerror_r's and some of fprintf's issues, if stderr is not
+@c oriented yet, create a new stream with a dup of stderr's fd and write
+@c to that instead of stderr, to avoid orienting it.
This function prints an error message to the stream @code{stderr};
see @ref{Standard Streams}. The orientation of @code{stderr} is not
changed.
@@ -1442,6 +1450,13 @@ These functions are declared in @file{error.h}.
@comment error.h
@comment GNU
@deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acsafe{}}
+@c Cancellation is disabled throughout the execution. It flushes stdout
+@c and then holds a lock on stderr while printing the program name and
+@c then running error_tail. The non-wide case just runs vfprintf; the
+@c wide case converts the message to an alloca/malloc-allocated buffer
+@c with mbsrtowcs, then prints it with vfwprintf. Afterwards,
+@c print_errno_message calls strerror_r and fxprintf.
The @code{error} function can be used to report general problems during
program execution. The @var{format} argument is a format string just
like those given to the @code{printf} family of functions. The
@@ -1477,6 +1492,15 @@ incremented by one to keep track of the number of errors reported.
@comment error.h
@comment GNU
@deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtunsafe{@mtasurace{:error_at_line/error_one_per_line} @mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acunsafe{@acucorrupt{/error_one_per_line}}}
+@c The error_one_per_line variable is accessed (without any form of
+@c synchronization, but since it's an int used once, it should be safe
+@c enough) and, if this mode is enabled, static variables used to hold
+@c the last printed file name and line number are accessed and modified
+@c without synchronization; the update is not atomic and it occurs
+@c before disabling cancellation, so it can be interrupted after only
+@c one of the two variables is modified. After that, it's very much
+@c like error.
The @code{error_at_line} function is very similar to the @code{error}
function. The only difference are the additional parameters @var{fname}
@@ -1582,6 +1606,8 @@ are included only for compatibility.
@comment err.h
@comment BSD
@deftypefun void warn (const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Just calls vwarn with the va_list.
The @code{warn} function is roughly equivalent to a call like
@smallexample
error (0, errno, format, @r{the parameters})
@@ -1594,6 +1620,11 @@ are not used.
@comment err.h
@comment BSD
@deftypefun void vwarn (const char *@var{format}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c While holding stderr's recursive lock, it prints the programname, the
+@c given message, and the error string with fw?printf's %m. When the
+@c stream is wide, convert_and_print converts the format string to an
+@c alloca/malloc-created buffer using mbsrtowcs and then calls fwprintf.
The @code{vwarn} function is just like @code{warn} except that the
parameters for the handling of the format string @var{format} are passed
in as a value of type @code{va_list}.
@@ -1602,6 +1633,8 @@ in as a value of type @code{va_list}.
@comment err.h
@comment BSD
@deftypefun void warnx (const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as warn, but without the strerror translation issues.
The @code{warnx} function is roughly equivalent to a call like
@smallexample
error (0, 0, format, @r{the parameters})
@@ -1615,6 +1648,8 @@ string is printed.
@comment err.h
@comment BSD
@deftypefun void vwarnx (const char *@var{format}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as vwarn, but without the strerror translation issues.
The @code{vwarnx} function is just like @code{warnx} except that the
parameters for the handling of the format string @var{format} are passed
in as a value of type @code{va_list}.
@@ -1623,6 +1658,8 @@ in as a value of type @code{va_list}.
@comment err.h
@comment BSD
@deftypefun void err (int @var{status}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as warn followed by exit.
The @code{err} function is roughly equivalent to a call like
@smallexample
error (status, errno, format, @r{the parameters})
@@ -1635,6 +1672,8 @@ are not used and that the program is exited even if @var{status} is zero.
@comment err.h
@comment BSD
@deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as vwarn followed by exit.
The @code{verr} function is just like @code{err} except that the
parameters for the handling of the format string @var{format} are passed
in as a value of type @code{va_list}.
@@ -1643,6 +1682,8 @@ in as a value of type @code{va_list}.
@comment err.h
@comment BSD
@deftypefun void errx (int @var{status}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as warnx followed by exit.
The @code{errx} function is roughly equivalent to a call like
@smallexample
error (status, 0, format, @r{the parameters})
@@ -1657,6 +1698,8 @@ string is printed.
@comment err.h
@comment BSD
@deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c Same as vwarnx followed by exit.
The @code{verrx} function is just like @code{errx} except that the
parameters for the handling of the format string @var{format} are passed
in as a value of type @code{va_list}.
diff --git a/libc/manual/filesys.texi b/libc/manual/filesys.texi
index 459fb1f5a..1c9d7d770 100644
--- a/libc/manual/filesys.texi
+++ b/libc/manual/filesys.texi
@@ -58,6 +58,25 @@ Prototypes for these functions are declared in the header file
@comment unistd.h
@comment POSIX.1
@deftypefun {char *} getcwd (char *@var{buffer}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c If buffer is NULL, this function calls malloc and realloc, and, in
+@c case of error, free. Linux offers a getcwd syscall that we use on
+@c GNU/Linux systems, but it may fail if the pathname is too long. As a
+@c fallback, and on other systems, the generic implementation opens each
+@c parent directory with opendir, which allocates memory for the
+@c directory stream with malloc. If a fstatat64 syscall is not
+@c available, very deep directory trees may also have to malloc to build
+@c longer sequences of ../../../... than those supported by a global
+@c const read-only string.
+
+@c linux/__getcwd
+@c posix/__getcwd
+@c malloc/realloc/free if buffer is NULL, or if dir is too deep
+@c lstat64 -> see its own entry
+@c fstatat64
+@c direct syscall if possible, alloca+snprintf+*stat64 otherwise
+@c openat64_not_cancel_3, close_not_cancel_no_status
+@c __fdopendir, __opendir, __readdir, rewinddir
The @code{getcwd} function returns an absolute file name representing
the current working directory, storing it in the character array
@var{buffer} that you provide. The @var{size} argument is how you tell
@@ -116,6 +135,9 @@ software.
@comment unistd.h
@comment BSD
@deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c Besides the getcwd safety issues, it calls strerror_r on error, which
+@c brings in all of the i18n issues.
This is similar to @code{getcwd}, but has no way to specify the size of
the buffer. @Theglibc{} provides @code{getwd} only
for backwards compatibility with BSD.
@@ -130,6 +152,9 @@ this function is deprecated.
@comment unistd.h
@comment GNU
@deftypefun {char *} get_current_dir_name (void)
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c Besides getcwd, which this function calls as a fallback, it calls
+@c getenv, with the potential thread-safety issues that brings about.
@vindex PWD
This @code{get_current_dir_name} function is basically equivalent to
@w{@code{getcwd (NULL, 0)}}. The only difference is that the value of
@@ -145,6 +170,7 @@ This function is a GNU extension.
@comment unistd.h
@comment POSIX.1
@deftypefun int chdir (const char *@var{filename})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is used to set the process's working directory to
@var{filename}.
@@ -158,6 +184,7 @@ file @var{filename} is not a directory.
@comment unistd.h
@comment XPG
@deftypefun int fchdir (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is used to set the process's working directory to
directory associated with the file descriptor @var{filedes}.
@@ -294,12 +321,14 @@ values and @code{st_mode} values:
@comment dirent.h
@comment BSD
@deftypefun int IFTODT (mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This returns the @code{d_type} value corresponding to @var{mode}.
@end deftypefun
@comment dirent.h
@comment BSD
@deftypefun mode_t DTTOIF (int @var{dtype})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This returns the @code{st_mode} value corresponding to @var{dtype}.
@end deftypefun
@end table
@@ -342,6 +371,9 @@ the following functions.
@comment dirent.h
@comment POSIX.1
@deftypefun {DIR *} opendir (const char *@var{dirname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c Besides the safe syscall, we have to allocate the DIR object with
+@c __alloc_dir, that calls malloc.
The @code{opendir} function opens and returns a directory stream for
reading the directory whose file name is @var{dirname}. The stream has
type @code{DIR *}.
@@ -381,6 +413,8 @@ alternative interface can be used.
@comment dirent.h
@comment GNU
@deftypefun {DIR *} fdopendir (int @var{fd})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c The DIR object is allocated with __alloc_dir, that calls malloc.
The @code{fdopendir} function works just like @code{opendir} but
instead of taking a file name and opening a file descriptor for the
directory the caller is required to provide a file descriptor. This
@@ -425,6 +459,7 @@ access.
@comment dirent.h
@comment GNU
@deftypefun int dirfd (DIR *@var{dirstream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{dirfd} returns the file descriptor associated with
the directory stream @var{dirstream}. This descriptor can be used until
the directory is closed with @code{closedir}. If the directory stream
@@ -443,6 +478,12 @@ symbols are declared in the header file @file{dirent.h}.
@comment dirent.h
@comment POSIX.1
@deftypefun {struct dirent *} readdir (DIR *@var{dirstream})
+@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c This function holds dirstream's non-recursive lock, which brings
+@c about the usual issues with locks and async signals and cancellation,
+@c but the lock taking is not enough to make the returned value safe to
+@c use, since it points to a stream's internal buffer that can be
+@c overwritten by subsequent calls or even released by closedir.
This function reads the next entry from the directory. It normally
returns a pointer to a structure containing information about the
file. This structure is associated with the @var{dirstream} handle
@@ -478,6 +519,7 @@ locking if multiple threads access the same @var{dirstream}.
@comment dirent.h
@comment GNU
@deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
This function is a version of @code{readdir} which performs internal
locking. Like @code{readdir} it returns the next entry from the
directory. To prevent conflicts between simultaneously running
@@ -549,6 +591,7 @@ of the last two functions.
@comment dirent.h
@comment LFS
@deftypefun {struct dirent64 *} readdir64 (DIR *@var{dirstream})
+@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
The @code{readdir64} function is just like the @code{readdir} function
except that it returns a pointer to a record of type @code{struct
dirent64}. Some of the members of this data type (notably @code{d_ino})
@@ -560,6 +603,7 @@ In all other aspects this function is equivalent to @code{readdir}.
@comment dirent.h
@comment LFS
@deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
The @code{readdir64_r} function is equivalent to the @code{readdir_r}
function except that it takes parameters of base type @code{struct
dirent64} instead of @code{struct dirent} in the second and third
@@ -570,6 +614,10 @@ position. The same precautions mentioned in the documentation of
@comment dirent.h
@comment POSIX.1
@deftypefun int closedir (DIR *@var{dirstream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@acsmem{} @acsfd{} @aculock{/hurd}}}
+@c No synchronization in the posix implementation, only in the hurd
+@c one. This is regarded as safe because it is undefined behavior if
+@c other threads could still be using the dir stream while it's closed.
This function closes the directory stream @var{dirstream}. It returns
@code{0} on success and @code{-1} on failure.
@@ -609,6 +657,7 @@ declared in the header file @file{dirent.h}.
@comment dirent.h
@comment POSIX.1
@deftypefun void rewinddir (DIR *@var{dirstream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
The @code{rewinddir} function is used to reinitialize the directory
stream @var{dirstream}, so that if you call @code{readdir} it
returns information about the first entry in the directory again. This
@@ -622,6 +671,10 @@ added or removed since you last called @code{opendir} or
@comment dirent.h
@comment BSD
@deftypefun {long int} telldir (DIR *@var{dirstream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
+@c The implementation is safe on most platforms, but on BSD it uses
+@c cookies, buckets and records, and the global array of pointers to
+@c dynamically allocated records is guarded by a non-recursive lock.
The @code{telldir} function returns the file position of the directory
stream @var{dirstream}. You can use this value with @code{seekdir} to
restore the directory stream to that position.
@@ -630,6 +683,10 @@ restore the directory stream to that position.
@comment dirent.h
@comment BSD
@deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
+@c The implementation is safe on most platforms, but on BSD it uses
+@c cookies, buckets and records, and the global array of pointers to
+@c dynamically allocated records is guarded by a non-recursive lock.
The @code{seekdir} function sets the file position of the directory
stream @var{dirstream} to @var{pos}. The value @var{pos} must be the
result of a previous call to @code{telldir} on this particular stream;
@@ -649,6 +706,19 @@ the result.
@comment dirent.h
@comment BSD/SVID
@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const struct dirent **, const struct dirent **))
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c The scandir function calls __opendirat, __readdir, and __closedir to
+@c go over the named dir; malloc and realloc to allocate the namelist
+@c and copies of each selected dirent, besides the selector, if given,
+@c and qsort and the cmp functions if the latter is given. In spite of
+@c the cleanup handler that releases memory and the file descriptor in
+@c case of synchronous cancellation, an asynchronous cancellation may
+@c still leak memory and a file descriptor. Although readdir is unsafe
+@c in general, the use of an internal dir stream for sequential scanning
+@c of the directory with copying of dirents before subsequent calls
+@c makes the use safe, and the fact that the dir stream is private to
+@c each scandir call does away with the lock issues in readdir and
+@c closedir.
The @code{scandir} function scans the contents of the directory selected
by @var{dir}. The result in *@var{namelist} is an array of pointers to
@@ -679,6 +749,8 @@ are very helpful for this purpose.
@comment dirent.h
@comment BSD/SVID
@deftypefun int alphasort (const void *@var{a}, const void *@var{b})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls strcoll.
The @code{alphasort} function behaves like the @code{strcoll} function
(@pxref{String/Array Comparison}). The difference is that the arguments
are not string pointers but instead they are of type
@@ -691,6 +763,9 @@ than zero depending on the order of the two entries @var{a} and @var{b}.
@comment dirent.h
@comment GNU
@deftypefun int versionsort (const void *@var{a}, const void *@var{b})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Calls strverscmp, which will accesses the locale object multiple
+@c times.
The @code{versionsort} function is like @code{alphasort} except that it
uses the @code{strverscmp} function internally.
@end deftypefun
@@ -703,6 +778,8 @@ dirent64}}. To use this we need a new function.
@comment dirent.h
@comment GNU
@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const struct dirent64 **, const struct dirent64 **))
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c See scandir.
The @code{scandir64} function works like the @code{scandir} function
except that the directory entries it returns are described by elements
of type @w{@code{struct dirent64}}. The function pointed to by
@@ -721,6 +798,8 @@ argument. Instead we provide the two replacement functions below.
@comment dirent.h
@comment GNU
@deftypefun int alphasort64 (const void *@var{a}, const void *@var{b})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c See alphasort.
The @code{alphasort64} function behaves like the @code{strcoll} function
(@pxref{String/Array Comparison}). The difference is that the arguments
are not string pointers but instead they are of type
@@ -733,6 +812,8 @@ than zero depending on the order of the two entries @var{a} and @var{b}.
@comment dirent.h
@comment GNU
@deftypefun int versionsort64 (const void *@var{a}, const void *@var{b})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c See versionsort.
The @code{versionsort64} function is like @code{alphasort64}, excepted that it
uses the @code{strverscmp} function internally.
@end deftypefun
@@ -913,6 +994,8 @@ file was passed).
@comment ftw.h
@comment SVID
@deftypefun int ftw (const char *@var{filename}, __ftw_func_t @var{func}, int @var{descriptors})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c see nftw for safety details
The @code{ftw} function calls the callback function given in the
parameter @var{func} for every item which is found in the directory
specified by @var{filename} and all directories below. The function
@@ -963,6 +1046,7 @@ interface transparently replaces the old interface.
@comment ftw.h
@comment Unix98
@deftypefun int ftw64 (const char *@var{filename}, __ftw64_func_t @var{func}, int @var{descriptors})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
This function is similar to @code{ftw} but it can work on filesystems
with large files. File information is reported using a variable of type
@code{struct stat64} which is passed by reference to the callback
@@ -976,6 +1060,17 @@ transparently replaces the old implementation.
@comment ftw.h
@comment XPG4.2
@deftypefun int nftw (const char *@var{filename}, __nftw_func_t @var{func}, int @var{descriptors}, int @var{flag})
+@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
+@c ftw_startup calls alloca, malloc, free, xstat/lxstat, tdestroy, and ftw_dir
+@c if FTW_CHDIR, call open, and fchdir, or chdir and getcwd
+@c ftw_dir calls open_dir_stream, readdir64, process_entry, closedir
+@c if FTW_CHDIR, also calls fchdir
+@c open_dir_stream calls malloc, realloc, readdir64, free, closedir,
+@c then openat64_not_cancel_3 and fdopendir or opendir, then dirfd.
+@c process_entry may cal realloc, fxstatat/lxstat/xstat, ftw_dir, and
+@c find_object (tsearch) and add_object (tfind).
+@c Since each invocation of *ftw uses its own private search tree, none
+@c of the search tree concurrency issues apply.
The @code{nftw} function works like the @code{ftw} functions. They call
the callback function @var{func} for all items found in the directory
@var{filename} and below. At most @var{descriptors} file descriptors
@@ -1036,6 +1131,7 @@ interface transparently replaces the old interface.
@comment ftw.h
@comment Unix98
@deftypefun int nftw64 (const char *@var{filename}, __nftw64_func_t @var{func}, int @var{descriptors}, int @var{flag})
+@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
This function is similar to @code{nftw} but it can work on filesystems
with large files. File information is reported using a variable of type
@code{struct stat64} which is passed by reference to the callback
@@ -1079,6 +1175,7 @@ file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int link (const char *@var{oldname}, const char *@var{newname})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{link} function makes a new link to the existing file named by
@var{oldname}, under the new name @var{newname}.
@@ -1186,6 +1283,7 @@ Prototypes for most of the functions listed in this section are in
@comment unistd.h
@comment BSD
@deftypefun int symlink (const char *@var{oldname}, const char *@var{newname})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{symlink} function makes a symbolic link to @var{oldname} named
@var{newname}.
@@ -1223,6 +1321,7 @@ exceeded.
@comment unistd.h
@comment BSD
@deftypefun ssize_t readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{readlink} function gets the value of the symbolic link
@var{filename}. The file name that the link points to is copied into
@var{buffer}. This file name string is @emph{not} null-terminated;
@@ -1282,6 +1381,8 @@ names can refer to the same inode.
@comment stdlib.h
@comment GNU
@deftypefun {char *} canonicalize_file_name (const char *@var{name})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c Calls realpath.
The @code{canonicalize_file_name} function returns the absolute name of
the file named by @var{name} which contains no @code{.}, @code{..}
@@ -1323,6 +1424,8 @@ where the result is placed in.
@comment stdlib.h
@comment XPG
@deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c Calls malloc, realloc, getcwd, lxstat64, readlink, alloca.
A call to @code{realpath} where the @var{resolved} parameter is
@code{NULL} behaves exactly like @code{canonicalize_file_name}. The
@@ -1362,6 +1465,7 @@ then the file is deleted as well. If the file has other remaining names
@comment unistd.h
@comment POSIX.1
@deftypefun int unlink (const char *@var{filename})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{unlink} function deletes the file name @var{filename}. If
this is a file's sole name, the file itself is also deleted. (Actually,
if any process has the file open when this happens, deletion is
@@ -1404,6 +1508,7 @@ file system and can't be modified.
@comment unistd.h
@comment POSIX.1
@deftypefun int rmdir (const char *@var{filename})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@cindex directories, deleting
@cindex deleting a directory
The @code{rmdir} function deletes a directory. The directory must be
@@ -1431,6 +1536,8 @@ The prototype for this function is declared in the header file
@comment stdio.h
@comment ISO
@deftypefun int remove (const char *@var{filename})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Calls unlink and rmdir.
This is the @w{ISO C} function to remove a file. It works like
@code{unlink} for files and like @code{rmdir} for directories.
@code{remove} is declared in @file{stdio.h}.
@@ -1446,6 +1553,10 @@ The @code{rename} function is used to change a file's name.
@comment stdio.h
@comment ISO
@deftypefun int rename (const char *@var{oldname}, const char *@var{newname})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a rename syscall, there's an emulation with link
+@c and unlink, but it's racy, even more so if newname exists and is
+@c unlinked first.
The @code{rename} function renames the file @var{oldname} to
@var{newname}. The file formerly accessible under the name
@var{oldname} is afterwards accessible as @var{newname} instead. (If
@@ -1541,6 +1652,7 @@ a shell command @code{mkdir} which does the same thing.)
@comment sys/stat.h
@comment POSIX.1
@deftypefun int mkdir (const char *@var{filename}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{mkdir} function creates a new, empty directory with name
@var{filename}.
@@ -1882,6 +1994,7 @@ header file @file{sys/stat.h}.
@comment sys/stat.h
@comment POSIX.1
@deftypefun int stat (const char *@var{filename}, struct stat *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{stat} function returns information about the attributes of the
file named by @w{@var{filename}} in the structure pointed to by @var{buf}.
@@ -1908,6 +2021,7 @@ replaces the normal implementation.
@comment sys/stat.h
@comment Unix98
@deftypefun int stat64 (const char *@var{filename}, struct stat64 *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{stat} but it is also able to work on
files larger than @math{2^31} bytes on 32-bit systems. To be able to do
this the result is stored in a variable of type @code{struct stat64} to
@@ -1921,6 +2035,7 @@ replaces the interface for small files on 32-bit machines.
@comment sys/stat.h
@comment POSIX.1
@deftypefun int fstat (int @var{filedes}, struct stat *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fstat} function is like @code{stat}, except that it takes an
open file descriptor as an argument instead of a file name.
@xref{Low-Level I/O}.
@@ -1942,6 +2057,7 @@ replaces the normal implementation.
@comment sys/stat.h
@comment Unix98
@deftypefun int fstat64 (int @var{filedes}, struct stat64 *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{fstat} but is able to work on large
files on 32-bit platforms. For large files the file descriptor
@var{filedes} should be obtained by @code{open64} or @code{creat64}.
@@ -1953,9 +2069,16 @@ function is available under the name @code{fstat} and so transparently
replaces the interface for small files on 32-bit machines.
@end deftypefun
+@c fstatat will call alloca and snprintf if the syscall is not
+@c available.
+@c @safety{@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+
@comment sys/stat.h
@comment BSD
@deftypefun int lstat (const char *@var{filename}, struct stat *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct system call through lxstat, sometimes with an xstat conv call
+@c afterwards.
The @code{lstat} function is like @code{stat}, except that it does not
follow symbolic links. If @var{filename} is the name of a symbolic
link, @code{lstat} returns information about the link itself; otherwise
@@ -1969,6 +2092,9 @@ replaces the normal implementation.
@comment sys/stat.h
@comment Unix98
@deftypefun int lstat64 (const char *@var{filename}, struct stat64 *@var{buf})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct system call through lxstat64, sometimes with an xstat conv
+@c call afterwards.
This function is similar to @code{lstat} but it is also able to work on
files larger than @math{2^31} bytes on 32-bit systems. To be able to do
this the result is stored in a variable of type @code{struct stat64} to
@@ -2007,12 +2133,14 @@ that file:
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_ISDIR (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a directory.
@end deftypefn
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_ISCHR (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a character special file (a
device like a terminal).
@end deftypefn
@@ -2020,6 +2148,7 @@ device like a terminal).
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_ISBLK (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a block special file (a device
like a disk).
@end deftypefn
@@ -2027,12 +2156,14 @@ like a disk).
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_ISREG (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a regular file.
@end deftypefn
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_ISFIFO (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a FIFO special file, or a
pipe. @xref{Pipes and FIFOs}.
@end deftypefn
@@ -2040,6 +2171,7 @@ pipe. @xref{Pipes and FIFOs}.
@comment sys/stat.h
@comment GNU
@deftypefn Macro int S_ISLNK (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a symbolic link.
@xref{Symbolic Links}.
@end deftypefn
@@ -2047,6 +2179,7 @@ This macro returns non-zero if the file is a symbolic link.
@comment sys/stat.h
@comment GNU
@deftypefn Macro int S_ISSOCK (mode_t @var{m})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns non-zero if the file is a socket. @xref{Sockets}.
@end deftypefn
@@ -2129,6 +2262,7 @@ the whole @code{struct stat} structure.
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_TYPEISMQ (struct stat *@var{s})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If the system implement POSIX message queues as distinct objects and the
file is a message queue object, this macro returns a non-zero value.
In all other cases the result is zero.
@@ -2137,6 +2271,7 @@ In all other cases the result is zero.
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_TYPEISSEM (struct stat *@var{s})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If the system implement POSIX semaphores as distinct objects and the
file is a semaphore object, this macro returns a non-zero value.
In all other cases the result is zero.
@@ -2145,6 +2280,7 @@ In all other cases the result is zero.
@comment sys/stat.h
@comment POSIX
@deftypefn Macro int S_TYPEISSHM (struct stat *@var{s})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If the system implement POSIX shared memory objects as distinct objects
and the file is a shared memory object, this macro returns a non-zero
value. In all other cases the result is zero.
@@ -2189,6 +2325,7 @@ The prototype for this function is declared in @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int chown (const char *@var{filename}, uid_t @var{owner}, gid_t @var{group})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{chown} function changes the owner of the file @var{filename} to
@var{owner}, and its group owner to @var{group}.
@@ -2223,6 +2360,7 @@ The file is on a read-only file system.
@comment unistd.h
@comment BSD
@deftypefun int fchown (int @var{filedes}, uid_t @var{owner}, gid_t @var{group})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{chown}, except that it changes the owner of the open
file with descriptor @var{filedes}.
@@ -2502,6 +2640,7 @@ The functions in this section are declared in @file{sys/stat.h}.
@comment sys/stat.h
@comment POSIX.1
@deftypefun mode_t umask (mode_t @var{mask})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{umask} function sets the file creation mask of the current
process to @var{mask}, and returns the previous value of the file
creation mask.
@@ -2527,6 +2666,7 @@ you just want to read the mask value, because it is reentrant.
@comment sys/stat.h
@comment GNU
@deftypefun mode_t getumask (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Return the current value of the file creation mask for the current
process. This function is a GNU extension and is only available on
@gnuhurdsystems{}.
@@ -2535,6 +2675,7 @@ process. This function is a GNU extension and is only available on
@comment sys/stat.h
@comment POSIX.1
@deftypefun int chmod (const char *@var{filename}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{chmod} function sets the access permission bits for the file
named by @var{filename} to @var{mode}.
@@ -2575,6 +2716,7 @@ for full details on the sticky bit.
@comment sys/stat.h
@comment BSD
@deftypefun int fchmod (int @var{filedes}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{chmod}, except that it changes the permissions of the
currently open file given by @var{filedes}.
@@ -2645,6 +2787,7 @@ The symbols in this section are declared in @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int access (const char *@var{filename}, int @var{how})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{access} function checks to see whether the file named by
@var{filename} can be accessed in the way specified by the @var{how}
argument. The @var{how} argument either can be the bitwise OR of the
@@ -2765,6 +2908,9 @@ This is the modification time for the file.
@comment utime.h
@comment POSIX.1
@deftypefun int utime (const char *@var{filename}, const struct utimbuf *@var{times})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a utime syscall, it non-atomically converts times
+@c to a struct timeval and calls utimes.
This function is used to modify the file times associated with the file
named @var{filename}.
@@ -2816,6 +2962,10 @@ in the header file @file{sys/time.h}.
@comment sys/time.h
@comment BSD
@deftypefun int utimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a utimes syscall, it non-atomically converts tvp
+@c to struct timespec array and issues a utimensat syscall, or to
+@c struct utimbuf and calls utime.
This function sets the file access and modification times of the file
@var{filename}. The new file access time is specified by
@code{@var{tvp}[0]}, and the new modification time by
@@ -2830,6 +2980,9 @@ function.
@comment sys/time.h
@comment BSD
@deftypefun int lutimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Since there's no lutimes syscall, it non-atomically converts tvp
+@c to struct timespec array and issues a utimensat syscall.
This function is like @code{utimes}, except that it does not follow
symbolic links. If @var{filename} is the name of a symbolic link,
@code{lutimes} sets the file access and modification times of the
@@ -2846,6 +2999,10 @@ function.
@comment sys/time.h
@comment BSD
@deftypefun int futimes (int @var{fd}, const struct timeval @var{tvp}@t{[2]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Since there's no futimes syscall, it non-atomically converts tvp
+@c to struct timespec array and issues a utimensat syscall, falling back
+@c to utimes on a /proc/self/fd symlink.
This function is like @code{utimes}, except that it takes an open file
descriptor as an argument instead of a file name. @xref{Low-Level
I/O}. This function comes from FreeBSD, and is not available on all
@@ -2900,6 +3057,8 @@ succeed, without actually accomplishing anything.
@comment unistd.h
@comment X/Open
@deftypefun int truncate (const char *@var{filename}, off_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a truncate syscall, we use open and ftruncate.
The @code{truncate} function changes the size of @var{filename} to
@var{length}. If @var{length} is shorter than the previous length, data
@@ -2944,6 +3103,8 @@ The operation was interrupted by a signal.
@comment unistd.h
@comment Unix98
@deftypefun int truncate64 (const char *@var{name}, off64_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a syscall, try truncate if length fits.
This function is similar to the @code{truncate} function. The
difference is that the @var{length} argument is 64 bits wide even on 32
bits machines, which allows the handling of files with sizes up to
@@ -2957,6 +3118,7 @@ When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
@comment unistd.h
@comment POSIX
@deftypefun int ftruncate (int @var{fd}, off_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{truncate}, but it works on a file descriptor @var{fd}
for an opened file instead of a file name to identify the object. The
@@ -3021,6 +3183,8 @@ The operation was interrupted by a signal.
@comment unistd.h
@comment Unix98
@deftypefun int ftruncate64 (int @var{id}, off64_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c In the absence of a syscall, try ftruncate if length fits.
This function is similar to the @code{ftruncate} function. The
difference is that the @var{length} argument is 64 bits wide even on 32
bits machines which allows the handling of files with sizes up to
@@ -3083,6 +3247,10 @@ The prototype for @code{mknod} is declared in @file{sys/stat.h}.
@comment sys/stat.h
@comment BSD
@deftypefun int mknod (const char *@var{filename}, mode_t @var{mode}, dev_t @var{dev})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Instead of issuing the syscall directly, we go through xmknod.
+@c Although the internal xmknod takes a dev_t*, that could lead to
+@c @mtsrace races, it's passed a pointer to mknod's dev.
The @code{mknod} function makes a special file with name @var{filename}.
The @var{mode} specifies the mode of the file, and may include the various
special file bits, such as @code{S_IFCHR} (for a character special file)
@@ -3134,6 +3302,20 @@ These facilities are declared in the header file @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun {FILE *} tmpfile (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
+@c The unsafety issues are those of fdopen, plus @acsfd because of the
+@c open.
+@c __path_search (internal buf, !dir, const pfx, !try_tmpdir) ok
+@c libc_secure_genenv only if try_tmpdir
+@c xstat64, strlen, strcmp, sprintf
+@c __gen_tempname (internal tmpl, __GT_FILE) ok
+@c strlen, memcmp, getpid, open/mkdir/lxstat64 ok
+@c HP_TIMING_NOW if available ok
+@c gettimeofday (!tz) first time, or every time if no HP_TIMING_NOW ok
+@c static value is used and modified without synchronization ok
+@c but the use is as a source of non-cryptographic randomness
+@c with retries in case of collision, so it should be safe
+@c unlink, fdopen
This function creates a temporary binary file for update mode, as if by
calling @code{fopen} with mode @code{"wb+"}. The file is deleted
automatically when it is closed or when the program terminates. (On
@@ -3150,6 +3332,7 @@ interface transparently replaces the old interface.
@comment stdio.h
@comment Unix98
@deftypefun {FILE *} tmpfile64 (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
This function is similar to @code{tmpfile}, but the stream it returns a
pointer to was opened using @code{tmpfile64}. Therefore this stream can
be used for files larger than @math{2^31} bytes on 32-bit machines.
@@ -3165,6 +3348,11 @@ and so transparently replaces the old interface.
@comment stdio.h
@comment ISO
@deftypefun {char *} tmpnam (char *@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmpnam/!result}}@asunsafe{}@acsafe{}}
+@c The passed-in buffer should not be modified concurrently with the
+@c call.
+@c __path_search (static or passed-in buf, !dir, !pfx, !try_tmpdir) ok
+@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
This function constructs and returns a valid file name that does not
refer to any existing file. If the @var{result} argument is a null
pointer, the return value is a pointer to an internal static string,
@@ -3189,6 +3377,7 @@ opening the file you should use the @code{O_EXCL} flag. Using
@comment stdio.h
@comment GNU
@deftypefun {char *} tmpnam_r (char *@var{result})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is nearly identical to the @code{tmpnam} function, except
that if @var{result} is a null pointer it returns a null pointer.
@@ -3225,6 +3414,13 @@ never less than @code{25}.
@comment stdio.h
@comment SVID
@deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c There's no way (short of being setuid) to avoid getenv("TMPDIR"),
+@c even with a non-NULL dir.
+@c
+@c __path_search (internal buf, dir, pfx, try_tmpdir) unsafe getenv
+@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
+@c strdup
This function generates a unique temporary file name. If @var{prefix}
is not a null pointer, up to five characters of this string are used as
a prefix for the file name. The return value is a string newly
@@ -3288,6 +3484,8 @@ string. These functions are declared in the header file @file{stdlib.h}.
@comment stdlib.h
@comment Unix
@deftypefun {char *} mktemp (char *@var{template})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c __gen_tempname (caller tmpl, __GT_NOCREATE) ok
The @code{mktemp} function generates a unique file name by modifying
@var{template} as described above. If successful, it returns
@var{template} as modified. If @code{mktemp} cannot find a unique file
@@ -3306,6 +3504,8 @@ opening the file you should use the @code{O_EXCL} flag. Using
@comment stdlib.h
@comment BSD
@deftypefun int mkstemp (char *@var{template})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+@c __gen_tempname (caller tmpl, __GT_FILE) ok
The @code{mkstemp} function generates a unique file name just as
@code{mktemp} does, but it also opens the file for you with @code{open}
(@pxref{Opening and Closing Files}). If successful, it modifies
@@ -3328,6 +3528,8 @@ new file and get an error if the file already exists.
@comment stdlib.h
@comment BSD
@deftypefun {char *} mkdtemp (char *@var{template})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c __gen_tempname (caller tmpl, __GT_DIR) ok
The @code{mkdtemp} function creates a directory with a unique name. If
it succeeds, it overwrites @var{template} with the name of the
directory, and returns @var{template}. As with @code{mktemp} and
@@ -3349,3 +3551,23 @@ creation always works like @code{open} with @code{O_EXCL}.
@xref{Creating Directories}.
The @code{mkdtemp} function comes from OpenBSD.
+
+@c FIXME these are undocumented:
+@c faccessat
+@c fchmodat
+@c fchownat
+@c futimesat
+@c fstatat (there's a commented-out safety assessment for this one)
+@c linkat
+@c mkdirat
+@c mkfifoat
+@c name_to_handle_at
+@c openat
+@c open_by_handle_at
+@c readlinkat
+@c renameat
+@c scandirat
+@c symlinkat
+@c unlinkat
+@c utimensat
+@c mknodat
diff --git a/libc/manual/getopt.texi b/libc/manual/getopt.texi
index f0b7283c8..aa4134b0e 100644
--- a/libc/manual/getopt.texi
+++ b/libc/manual/getopt.texi
@@ -60,6 +60,28 @@ option argument, for those options that accept arguments.
@comment unistd.h
@comment POSIX.2
@deftypefun int getopt (int @var{argc}, char *const *@var{argv}, const char *@var{options})
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c Swapping elements of passed-in argv may be partial in case of
+@c cancellation. Gettext brings about a whole lot of AS and AC safety
+@c issues. The getopt API involves returning values in the
+@c non-thread-specific optarg variable, which adds another thread-safety
+@c issue. Given print_errors, it may output errors to stderr, which may
+@c self-deadlock, leak locks, or encounter (in a signal handler) or
+@c leave (in case of cancellation) stderr in an inconsistent state.
+@c Various implicit, indirect uses of malloc, in uses of memstream and
+@c asprintf for error-printing, bring about the usual malloc issues.
+@c (The explicit use of malloc in a conditional situation in
+@c _getopt_initialize is never exercised in glibc.)
+@c
+@c _getopt_internal
+@c _getopt_internal_r
+@c gettext
+@c _getopt_initialize
+@c getenv
+@c malloc if USE_NONOPTION_FLAGS, never defined in libc
+@c open_memstream
+@c lockfile, unlockfile, __fxprintf -> stderr
+@c asprintf
The @code{getopt} function gets the next option argument from the
argument list specified by the @var{argv} and @var{argc} arguments.
Normally these values come directly from the arguments received by
@@ -225,6 +247,8 @@ was seen.
@comment getopt.h
@comment GNU
@deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c Same issues as getopt.
Decode options from the vector @var{argv} (whose length is @var{argc}).
The argument @var{shortopts} describes the short options to accept, just as
it does in @code{getopt}. The argument @var{longopts} describes the long
@@ -278,6 +302,8 @@ getopt functionality there is one more function available.
@comment getopt.h
@comment GNU
@deftypefun int getopt_long_only (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c Same issues as getopt.
The @code{getopt_long_only} function is equivalent to the
@code{getopt_long} function but it allows to specify the user of the
diff --git a/libc/manual/intro.texi b/libc/manual/intro.texi
index deaf089b1..0f5785990 100644
--- a/libc/manual/intro.texi
+++ b/libc/manual/intro.texi
@@ -159,6 +159,14 @@ Utilities standard} (POSIX.2) are also implemented in @theglibc{}.
These include utilities for dealing with regular expressions and other
pattern matching facilities (@pxref{Pattern Matching}).
+@menu
+* POSIX Safety Concepts:: Safety concepts from POSIX.
+* Unsafe Features:: Features that make functions unsafe.
+* Conditionally Safe Features:: Features that make functions unsafe
+ in the absence of workarounds.
+* Other Safety Remarks:: Additional safety features and remarks.
+@end menu
+
@comment Roland sez:
@comment The GNU C library as it stands conforms to 1003.2 draft 11, which
@comment specifies:
@@ -172,6 +180,725 @@ pattern matching facilities (@pxref{Pattern Matching}).
@comment <wordexp.h> (not yet implemented)
@comment confstr
+@node POSIX Safety Concepts, Unsafe Features, , POSIX
+@subsubsection POSIX Safety Concepts
+@cindex POSIX Safety Concepts
+
+This manual documents various safety properties of @glibcadj{}
+functions, in lines that follow their prototypes and look like:
+
+@sampsafety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+
+The properties are assessed according to the criteria set forth in the
+POSIX standard for such safety contexts as Thread-, Async-Signal- and
+Async-Cancel- -Safety. Intuitive definitions of these properties,
+attempting to capture the meaning of the standard definitions, follow.
+
+@itemize @bullet
+
+@item
+@cindex MT-Safe
+@cindex Thread-Safe
+@code{MT-Safe} or Thread-Safe functions are safe to call in the presence
+of other threads. MT, in MT-Safe, stands for Multi Thread.
+
+Being MT-Safe does not imply a function is atomic, nor that it uses any
+of the memory synchronization mechanisms POSIX exposes to users. It is
+even possible that calling MT-Safe functions in sequence does not yield
+an MT-Safe combination. For example, having a thread call two MT-Safe
+functions one right after the other does not guarantee behavior
+equivalent to atomic execution of a combination of both functions, since
+concurrent calls in other threads may interfere in a destructive way.
+
+Whole-program optimizations that could inline functions across library
+interfaces may expose unsafe reordering, and so performing inlining
+across the @glibcadj{} interface is not recommended. The documented
+MT-Safety status is not guaranteed under whole-program optimization.
+However, functions defined in user-visible headers are designed to be
+safe for inlining.
+
+
+@item
+@cindex AS-Safe
+@cindex Async-Signal-Safe
+@code{AS-Safe} or Async-Signal-Safe functions are safe to call from
+asynchronous signal handlers. AS, in AS-Safe, stands for Asynchronous
+Signal.
+
+Many functions that are AS-Safe may set @code{errno}, or modify the
+floating-point environment, because their doing so does not make them
+unsuitable for use in signal handlers. However, programs could
+misbehave should asynchronous signal handlers modify this thread-local
+state, and the signal handling machinery cannot be counted on to
+preserve it. Therefore, signal handlers that call functions that may
+set @code{errno} or modify the floating-point environment @emph{must}
+save their original values, and restore them before returning.
+
+
+@item
+@cindex AC-Safe
+@cindex Async-Cancel-Safe
+@code{AC-Safe} or Async-Cancel-Safe functions are safe to call when
+asynchronous cancellation is enabled. AC in AC-Safe stands for
+Asynchronous Cancellation.
+
+The POSIX standard defines only three functions to be AC-Safe, namely
+@code{pthread_cancel}, @code{pthread_setcancelstate}, and
+@code{pthread_setcanceltype}. At present @theglibc{} provides no
+guarantees beyond these three functions, but does document which
+functions are presently AC-Safe. This documentation is provided for use
+by @theglibc{} developers.
+
+Just like signal handlers, cancellation cleanup routines must configure
+the floating point environment they require. The routines cannot assume
+a floating point environment, particularly when asynchronous
+cancellation is enabled. If the configuration of the floating point
+environment cannot be performed atomically then it is also possible that
+the environment encountered is internally inconsistent.
+
+
+@item
+@cindex MT-Unsafe
+@cindex Thread-Unsafe
+@cindex AS-Unsafe
+@cindex Async-Signal-Unsafe
+@cindex AC-Unsafe
+@cindex Async-Cancel-Unsafe
+@code{MT-Unsafe}, @code{AS-Unsafe}, @code{AC-Unsafe} functions are not
+safe to call within the safety contexts described above. Calling them
+within such contexts invokes undefined behavior.
+
+Functions not explicitly documented as safe in a safety context should
+be regarded as Unsafe.
+
+
+@item
+@cindex Preliminary
+@code{Preliminary} safety properties are documented, indicating these
+properties may @emph{not} be counted on in future releases of
+@theglibc{}.
+
+Such preliminary properties are the result of an assessment of the
+properties of our current implementation, rather than of what is
+mandated and permitted by current and future standards.
+
+Although we strive to abide by the standards, in some cases our
+implementation is safe even when the standard does not demand safety,
+and in other cases our implementation does not meet the standard safety
+requirements. The latter are most likely bugs; the former, when marked
+as @code{Preliminary}, should not be counted on: future standards may
+require changes that are not compatible with the additional safety
+properties afforded by the current implementation.
+
+Furthermore, the POSIX standard does not offer a detailed definition of
+safety. We assume that, by ``safe to call'', POSIX means that, as long
+as the program does not invoke undefined behavior, the ``safe to call''
+function behaves as specified, and does not cause other functions to
+deviate from their specified behavior. We have chosen to use its loose
+definitions of safety, not because they are the best definitions to use,
+but because choosing them harmonizes this manual with POSIX.
+
+Please keep in mind that these are preliminary definitions and
+annotations, and certain aspects of the definitions are still under
+discussion and might be subject to clarification or change.
+
+Over time, we envision evolving the preliminary safety notes into stable
+commitments, as stable as those of our interfaces. As we do, we will
+remove the @code{Preliminary} keyword from safety notes. As long as the
+keyword remains, however, they are not to be regarded as a promise of
+future behavior.
+
+
+@end itemize
+
+Other keywords that appear in safety notes are defined in subsequent
+sections.
+
+
+@node Unsafe Features, Conditionally Safe Features, POSIX Safety Concepts, POSIX
+@subsubsection Unsafe Features
+@cindex Unsafe Features
+
+Functions that are unsafe to call in certain contexts are annotated with
+keywords that document their features that make them unsafe to call.
+AS-Unsafe features in this section indicate the functions are never safe
+to call when asynchronous signals are enabled. AC-Unsafe features
+indicate they are never safe to call when asynchronous cancellation is
+enabled. There are no MT-Unsafe marks in this section.
+
+@itemize @bullet
+
+@item @code{lock}
+@cindex lock
+
+Functions marked with @code{lock} as an AS-Unsafe feature may be
+interrupted by a signal while holding a non-recursive lock. If the
+signal handler calls another such function that takes the same lock, the
+result is a deadlock.
+
+Functions annotated with @code{lock} as an AC-Unsafe feature may, if
+cancelled asynchronously, fail to release a lock that would have been
+released if their execution had not been interrupted by asynchronous
+thread cancellation. Once a lock is left taken, attempts to take that
+lock will block indefinitely.
+
+
+@item @code{corrupt}
+@cindex corrupt
+
+Functions marked with @code{corrupt} as an AS-Unsafe feature may corrupt
+data structures and misbehave when they interrupt, or are interrupted
+by, another such function. Unlike functions marked with @code{lock},
+these take recursive locks to avoid MT-Safety problems, but this is not
+enough to stop a signal handler from observing a partially-updated data
+structure. Further corruption may arise from the interrupted function's
+failure to notice updates made by signal handlers.
+
+Functions marked with @code{corrupt} as an AC-Unsafe feature may leave
+data structures in a corrupt, partially updated state. Subsequent uses
+of the data structure may misbehave.
+
+@c A special case, probably not worth documenting separately, involves
+@c reallocing, or even freeing pointers. Any case involving free could
+@c be easily turned into an ac-safe leak by resetting the pointer before
+@c releasing it; I don't think we have any case that calls for this sort
+@c of fixing. Fixing the realloc cases would require a new interface:
+@c instead of @code{ptr=realloc(ptr,size)} we'd have to introduce
+@c @code{acsafe_realloc(&ptr,size)} that would modify ptr before
+@c releasing the old memory. The ac-unsafe realloc could be implemented
+@c in terms of an internal interface with this semantics (say
+@c __acsafe_realloc), but since realloc can be overridden, the function
+@c we call to implement realloc should not be this internal interface,
+@c but another internal interface that calls __acsafe_realloc if realloc
+@c was not overridden, and calls the overridden realloc with async
+@c cancel disabled. --lxoliva
+
+
+@item @code{heap}
+@cindex heap
+
+Functions marked with @code{heap} may call heap memory management
+functions from the @code{malloc}/@code{free} family of functions and are
+only as safe as those functions. This note is thus equivalent to:
+
+@sampsafety{@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+
+
+@c Check for cases that should have used plugin instead of or in
+@c addition to this. Then, after rechecking gettext, adjust i18n if
+@c needed.
+@item @code{dlopen}
+@cindex dlopen
+
+Functions marked with @code{dlopen} use the dynamic loader to load
+shared libraries into the current execution image. This involves
+opening files, mapping them into memory, allocating additional memory,
+resolving symbols, applying relocations and more, all of this while
+holding internal dynamic loader locks.
+
+The locks are enough for these functions to be AS- and AC-Unsafe, but
+other issues may arise. At present this is a placeholder for all
+potential safety issues raised by @code{dlopen}.
+
+@c dlopen runs init and fini sections of the module; does this mean
+@c dlopen always implies plugin?
+
+
+@item @code{plugin}
+@cindex plugin
+
+Functions annotated with @code{plugin} may run code from plugins that
+may be external to @theglibc{}. Such plugin functions are assumed to be
+MT-Safe, AS-Unsafe and AC-Unsafe. Examples of such plugins are stack
+@cindex NSS
+unwinding libraries, name service switch (NSS) and character set
+@cindex iconv
+conversion (iconv) back-ends.
+
+Although the plugins mentioned as examples are all brought in by means
+of dlopen, the @code{plugin} keyword does not imply any direct
+involvement of the dynamic loader or the @code{libdl} interfaces, those
+are covered by @code{dlopen}. For example, if one function loads a
+module and finds the addresses of some of its functions, while another
+just calls those already-resolved functions, the former will be marked
+with @code{dlopen}, whereas the latter will get the @code{plugin}. When
+a single function takes all of these actions, then it gets both marks.
+
+
+@item @code{i18n}
+@cindex i18n
+
+Functions marked with @code{i18n} may call internationalization
+functions of the @code{gettext} family and will be only as safe as those
+functions. This note is thus equivalent to:
+
+@sampsafety{@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascudlopen{}}@acunsafe{@acucorrupt{}}}
+
+
+@item @code{timer}
+@cindex timer
+
+Functions marked with @code{timer} use the @code{alarm} function or
+similar to set a time-out for a system call or a long-running operation.
+In a multi-threaded program, there is a risk that the time-out signal
+will be delivered to a different thread, thus failing to interrupt the
+intended thread. Besides being MT-Unsafe, such functions are always
+AS-Unsafe, because calling them in signal handlers may interfere with
+timers set in the interrupted code, and AC-Unsafe, because there is no
+safe way to guarantee an earlier timer will be reset in case of
+asynchronous cancellation.
+
+@end itemize
+
+
+@node Conditionally Safe Features, Other Safety Remarks, Unsafe Features, POSIX
+@subsubsection Conditionally Safe Features
+@cindex Conditionally Safe Features
+
+For some features that make functions unsafe to call in certain
+contexts, there are known ways to avoid the safety problem other than
+refraining from calling the function altogether. The keywords that
+follow refer to such features, and each of their definitions indicate
+how the whole program needs to be constrained in order to remove the
+safety problem indicated by the keyword. Only when all the reasons that
+make a function unsafe are observed and addressed, by applying the
+documented constraints, does the function become safe to call in a
+context.
+
+@itemize @bullet
+
+@item @code{init}
+@cindex init
+
+Functions marked with @code{init} as an MT-Unsafe feature perform
+MT-Unsafe initialization when they are first called.
+
+Calling such a function at least once in single-threaded mode removes
+this specific cause for the function to be regarded as MT-Unsafe. If no
+other cause for that remains, the function can then be safely called
+after other threads are started.
+
+Functions marked with @code{init} as an AS- or AC-Unsafe feature use the
+internal @code{libc_once} machinery or similar to initialize internal
+data structures.
+
+If a signal handler interrupts such an initializer, and calls any
+function that also performs @code{libc_once} initialization, it will
+deadlock if the thread library has been loaded.
+
+Furthermore, if an initializer is partially complete before it is
+canceled or interrupted by a signal whose handler requires the same
+initialization, some or all of the initialization may be performed more
+than once, leaking resources or even resulting in corrupt internal data.
+
+Applications that need to call functions marked with @code{init} as an
+AS- or AC-Unsafe feature should ensure the initialization is performed
+before configuring signal handlers or enabling cancellation, so that the
+AS- and AC-Safety issues related with @code{libc_once} do not arise.
+
+@c We may have to extend the annotations to cover conditions in which
+@c initialization may or may not occur, since an initial call in a safe
+@c context is no use if the initialization doesn't take place at that
+@c time: it doesn't remove the risk for later calls.
+
+
+@item @code{race}
+@cindex race
+
+Functions annotated with @code{race} as an MT-Safety issue operate on
+objects in ways that may cause data races or similar forms of
+destructive interference out of concurrent execution. In some cases,
+the objects are passed to the functions by users; in others, they are
+used by the functions to return values to users; in others, they are not
+even exposed to users.
+
+We consider access to objects passed as (indirect) arguments to
+functions to be data race free. The assurance of data race free objects
+is the caller's responsibility. We will not mark a function as
+MT-Unsafe or AS-Unsafe if it misbehaves when users fail to take the
+measures required by POSIX to avoid data races when dealing with such
+objects. As a general rule, if a function is documented as reading from
+an object passed (by reference) to it, or modifying it, users ought to
+use memory synchronization primitives to avoid data races just as they
+would should they perform the accesses themselves rather than by calling
+the library function. @code{FILE} streams are the exception to the
+general rule, in that POSIX mandates the library to guard against data
+races in many functions that manipulate objects of this specific opaque
+type. We regard this as a convenience provided to users, rather than as
+a general requirement whose expectations should extend to other types.
+
+In order to remind users that guarding certain arguments is their
+responsibility, we will annotate functions that take objects of certain
+types as arguments. We draw the line for objects passed by users as
+follows: objects whose types are exposed to users, and that users are
+expected to access directly, such as memory buffers, strings, and
+various user-visible @code{struct} types, do @emph{not} give reason for
+functions to be annotated with @code{race}. It would be noisy and
+redundant with the general requirement, and not many would be surprised
+by the library's lack of internal guards when accessing objects that can
+be accessed directly by users.
+
+As for objects that are opaque or opaque-like, in that they are to be
+manipulated only by passing them to library functions (e.g.,
+@code{FILE}, @code{DIR}, @code{obstack}, @code{iconv_t}), there might be
+additional expectations as to internal coordination of access by the
+library. We will annotate, with @code{race} followed by a colon and the
+argument name, functions that take such objects but that do not take
+care of synchronizing access to them by default. For example,
+@code{FILE} stream @code{unlocked} functions will be annotated, but
+those that perform implicit locking on @code{FILE} streams by default
+will not, even though the implicit locking may be disabled on a
+per-stream basis.
+
+In either case, we will not regard as MT-Unsafe functions that may
+access user-supplied objects in unsafe ways should users fail to ensure
+the accesses are well defined. The notion prevails that users are
+expected to safeguard against data races any user-supplied objects that
+the library accesses on their behalf.
+
+@c The above describes @mtsrace; @mtasurace is described below.
+
+This user responsibility does not apply, however, to objects controlled
+by the library itself, such as internal objects and static buffers used
+to return values from certain calls. When the library doesn't guard
+them against concurrent uses, these cases are regarded as MT-Unsafe and
+AS-Unsafe (although the @code{race} mark under AS-Unsafe will be omitted
+as redundant with the one under MT-Unsafe). As in the case of
+user-exposed objects, the mark may be followed by a colon and an
+identifier. The identifier groups all functions that operate on a
+certain unguarded object; users may avoid the MT-Safety issues related
+with unguarded concurrent access to such internal objects by creating a
+non-recursive mutex related with the identifier, and always holding the
+mutex when calling any function marked as racy on that identifier, as
+they would have to should the identifier be an object under user
+control. The non-recursive mutex avoids the MT-Safety issue, but it
+trades one AS-Safety issue for another, so use in asynchronous signals
+remains undefined.
+
+When the identifier relates to a static buffer used to hold return
+values, the mutex must be held for as long as the buffer remains in use
+by the caller. Many functions that return pointers to static buffers
+offer reentrant variants that store return values in caller-supplied
+buffers instead. In some cases, such as @code{tmpname}, the variant is
+chosen not by calling an alternate entry point, but by passing a
+non-@code{NULL} pointer to the buffer in which the returned values are
+to be stored. These variants are generally preferable in multi-threaded
+programs, although some of them are not MT-Safe because of other
+internal buffers, also documented with @code{race} notes.
+
+
+@item @code{const}
+@cindex const
+
+Functions marked with @code{const} as an MT-Safety issue non-atomically
+modify internal objects that are better regarded as constant, because a
+substantial portion of @theglibc{} accesses them without
+synchronization. Unlike @code{race}, that causes both readers and
+writers of internal objects to be regarded as MT-Unsafe and AS-Unsafe,
+this mark is applied to writers only. Writers remain equally MT- and
+AS-Unsafe to call, but the then-mandatory constness of objects they
+modify enables readers to be regarded as MT-Safe and AS-Safe (as long as
+no other reasons for them to be unsafe remain), since the lack of
+synchronization is not a problem when the objects are effectively
+constant.
+
+The identifier that follows the @code{const} mark will appear by itself
+as a safety note in readers. Programs that wish to work around this
+safety issue, so as to call writers, may use a non-recursve
+@code{rwlock} associated with the identifier, and guard @emph{all} calls
+to functions marked with @code{const} followed by the identifier with a
+write lock, and @emph{all} calls to functions marked with the identifier
+by itself with a read lock. The non-recursive locking removes the
+MT-Safety problem, but it trades one AS-Safety problem for another, so
+use in asynchronous signals remains undefined.
+
+@c But what if, instead of marking modifiers with const:id and readers
+@c with just id, we marked writers with race:id and readers with ro:id?
+@c Instead of having to define each instance of “idâ€, we'd have a
+@c general pattern governing all such “idâ€s, wherein race:id would
+@c suggest the need for an exclusive/write lock to make the function
+@c safe, whereas ro:id would indicate “id†is expected to be read-only,
+@c but if any modifiers are called (while holding an exclusive lock),
+@c then ro:id-marked functions ought to be guarded with a read lock for
+@c safe operation. ro:env or ro:locale, for example, seems to convey
+@c more clearly the expectations and the meaning, than just env or
+@c locale.
+
+
+@item @code{sig}
+@cindex sig
+
+Functions marked with @code{sig} as a MT-Safety issue (that implies an
+identical AS-Safety issue, omitted for brevity) may temporarily install
+a signal handler for internal purposes, which may interfere with other
+uses of the signal, identified after a colon.
+
+This safety problem can be worked around by ensuring that no other uses
+of the signal will take place for the duration of the call. Holding a
+non-recursive mutex while calling all functions that use the same
+temporary signal; blocking that signal before the call and resetting its
+handler afterwards is recommended.
+
+There is no safe way to guarantee the original signal handler is
+restored in case of asynchronous cancellation, therefore so-marked
+functions are also AC-Unsafe.
+
+@c fixme: at least deferred cancellation should get it right, and would
+@c obviate the restoring bit below, and the qualifier above.
+
+Besides the measures recommended to work around the MT- and AS-Safety
+problem, in order to avert the cancellation problem, disabling
+asynchronous cancellation @emph{and} installing a cleanup handler to
+restore the signal to the desired state and to release the mutex are
+recommended.
+
+
+@item @code{term}
+@cindex term
+
+Functions marked with @code{term} as an MT-Safety issue may change the
+terminal settings in the recommended way, namely: call @code{tcgetattr},
+modify some flags, and then call @code{tcsetattr}; this creates a window
+in which changes made by other threads are lost. Thus, functions marked
+with @code{term} are MT-Unsafe. The same window enables changes made by
+asynchronous signals to be lost. These functions are also AS-Unsafe,
+but the corresponding mark is omitted as redundant.
+
+It is thus advisable for applications using the terminal to avoid
+concurrent and reentrant interactions with it, by not using it in signal
+handlers or blocking signals that might use it, and holding a lock while
+calling these functions and interacting with the terminal. This lock
+should also be used for mutual exclusion with functions marked with
+@code{@mtasurace{:tcattr(fd)}}, where @var{fd} is a file descriptor for
+the controlling terminal. The caller may use a single mutex for
+simplicity, or use one mutex per terminal, even if referenced by
+different file descriptors.
+
+Functions marked with @code{term} as an AC-Safety issue are supposed to
+restore terminal settings to their original state, after temporarily
+changing them, but they may fail to do so if cancelled.
+
+@c fixme: at least deferred cancellation should get it right, and would
+@c obviate the restoring bit below, and the qualifier above.
+
+Besides the measures recommended to work around the MT- and AS-Safety
+problem, in order to avert the cancellation problem, disabling
+asynchronous cancellation @emph{and} installing a cleanup handler to
+restore the terminal settings to the original state and to release the
+mutex are recommended.
+
+
+@end itemize
+
+
+@node Other Safety Remarks, , Conditionally Safe Features, POSIX
+@subsubsection Other Safety Remarks
+@cindex Other Safety Remarks
+
+Additional keywords may be attached to functions, indicating features
+that do not make a function unsafe to call, but that may need to be
+taken into account in certain classes of programs:
+
+@itemize @bullet
+
+@item @code{locale}
+@cindex locale
+
+Functions annotated with @code{locale} as an MT-Safety issue read from
+the locale object without any form of synchronization. Functions
+annotated with @code{locale} called concurrently with locale changes may
+behave in ways that do not correspond to any of the locales active
+during their execution, but an unpredictable mix thereof.
+
+We do not mark these functions as MT- or AS-Unsafe, however, because
+functions that modify the locale object are marked with
+@code{const:locale} and regarded as unsafe. Being unsafe, the latter
+are not to be called when multiple threads are running or asynchronous
+signals are enabled, and so the locale can be considered effectively
+constant in these contexts, which makes the former safe.
+
+@c Should the locking strategy suggested under @code{const} be used,
+@c failure to guard locale uses is not as fatal as data races in
+@c general: unguarded uses will @emph{not} follow dangling pointers or
+@c access uninitialized, unmapped or recycled memory. Each access will
+@c read from a consistent locale object that is or was active at some
+@c point during its execution. Without synchronization, however, it
+@c cannot even be assumed that, after a change in locale, earlier
+@c locales will no longer be used, even after the newly-chosen one is
+@c used in the thread. Nevertheless, even though unguarded reads from
+@c the locale will not violate type safety, functions that access the
+@c locale multiple times may invoke all sorts of undefined behavior
+@c because of the unexpected locale changes.
+
+
+@item @code{env}
+@cindex env
+
+Functions marked with @code{env} as an MT-Safety issue access the
+environment with @code{getenv} or similar, without any guards to ensure
+safety in the presence of concurrent modifications.
+
+We do not mark these functions as MT- or AS-Unsafe, however, because
+functions that modify the environment are all marked with
+@code{const:env} and regarded as unsafe. Being unsafe, the latter are
+not to be called when multiple threads are running or asynchronous
+signals are enabled, and so the environment can be considered
+effectively constant in these contexts, which makes the former safe.
+
+
+@item @code{hostid}
+@cindex hostid
+
+The function marked with @code{hostid} as an MT-Safety issue reads from
+the system-wide data structures that hold the ``host ID'' of the
+machine. These data structures cannot generally be modified atomically.
+Since it is expected that the ``host ID'' will not normally change, the
+function that reads from it (@code{gethostid}) is regarded as safe,
+whereas the function that modifies it (@code{sethostid}) is marked with
+@code{@mtasuconst{:@mtshostid{}}}, indicating it may require special
+care if it is to be called. In this specific case, the special care
+amounts to system-wide (not merely intra-process) coordination.
+
+
+@item @code{sigintr}
+@cindex sigintr
+
+Functions marked with @code{sigintr} as an MT-Safety issue access the
+@code{_sigintr} internal data structure without any guards to ensure
+safety in the presence of concurrent modifications.
+
+We do not mark these functions as MT- or AS-Unsafe, however, because
+functions that modify the this data structure are all marked with
+@code{const:sigintr} and regarded as unsafe. Being unsafe, the latter
+are not to be called when multiple threads are running or asynchronous
+signals are enabled, and so the data structure can be considered
+effectively constant in these contexts, which makes the former safe.
+
+
+@item @code{fd}
+@cindex fd
+
+Functions annotated with @code{fd} as an AC-Safety issue may leak file
+descriptors if asynchronous thread cancellation interrupts their
+execution.
+
+Functions that allocate or deallocate file descriptors will generally be
+marked as such. Even if they attempted to protect the file descriptor
+allocation and deallocation with cleanup regions, allocating a new
+descriptor and storing its number where the cleanup region could release
+it cannot be performed as a single atomic operation. Similarly,
+releasing the descriptor and taking it out of the data structure
+normally responsible for releasing it cannot be performed atomically.
+There will always be a window in which the descriptor cannot be released
+because it was not stored in the cleanup handler argument yet, or it was
+already taken out before releasing it. It cannot be taken out after
+release: an open descriptor could mean either that the descriptor still
+has to be closed, or that it already did so but the descriptor was
+reallocated by another thread or signal handler.
+
+Such leaks could be internally avoided, with some performance penalty,
+by temporarily disabling asynchronous thread cancellation. However,
+since callers of allocation or deallocation functions would have to do
+this themselves, to avoid the same sort of leak in their own layer, it
+makes more sense for the library to assume they are taking care of it
+than to impose a performance penalty that is redundant when the problem
+is solved in upper layers, and insufficient when it is not.
+
+This remark by itself does not cause a function to be regarded as
+AC-Unsafe. However, cumulative effects of such leaks may pose a
+problem for some programs. If this is the case, suspending asynchronous
+cancellation for the duration of calls to such functions is recommended.
+
+
+@item @code{mem}
+@cindex mem
+
+Functions annotated with @code{mem} as an AC-Safety issue may leak
+memory if asynchronous thread cancellation interrupts their execution.
+
+The problem is similar to that of file descriptors: there is no atomic
+interface to allocate memory and store its address in the argument to a
+cleanup handler, or to release it and remove its address from that
+argument, without at least temporarily disabling asynchronous
+cancellation, which these functions do not do.
+
+This remark does not by itself cause a function to be regarded as
+generally AC-Unsafe. However, cumulative effects of such leaks may be
+severe enough for some programs that disabling asynchronous cancellation
+for the duration of calls to such functions may be required.
+
+
+@item @code{cwd}
+@cindex cwd
+
+Functions marked with @code{cwd} as an MT-Safety issue may temporarily
+change the current working directory during their execution, which may
+cause relative pathnames to be resolved in unexpected ways in other
+threads or within asynchronous signal or cancellation handlers.
+
+This is not enough of a reason to mark so-marked functions as MT- or
+AS-Unsafe, but when this behavior is optional (e.g., @code{nftw} with
+@code{FTW_CHDIR}), avoiding the option may be a good alternative to
+using full pathnames or file descriptor-relative (e.g. @code{openat})
+system calls.
+
+
+@item @code{!posix}
+@cindex !posix
+
+This remark, as an MT-, AS- or AC-Safety note to a function, indicates
+the safety status of the function is known to differ from the specified
+status in the POSIX standard. For example, POSIX does not require a
+function to be Safe, but our implementation is, or vice-versa.
+
+For the time being, the absence of this remark does not imply the safety
+properties we documented are identical to those mandated by POSIX for
+the corresponding functions.
+
+
+@item @code{:identifier}
+@cindex :identifier
+
+Annotations may sometimes be followed by identifiers, intended to group
+several functions that e.g. access the data structures in an unsafe way,
+as in @code{race} and @code{const}, or to provide more specific
+information, such as naming a signal in a function marked with
+@code{sig}. It is envisioned that it may be applied to @code{lock} and
+@code{corrupt} as well in the future.
+
+In most cases, the identifier will name a set of functions, but it may
+name global objects or function arguments, or identifiable properties or
+logical components associated with them, with a notation such as
+e.g. @code{:buf(arg)} to denote a buffer associated with the argument
+@var{arg}, or @code{:tcattr(fd)} to denote the terminal attributes of a
+file descriptor @var{fd}.
+
+The most common use for identifiers is to provide logical groups of
+functions and arguments that need to be protected by the same
+synchronization primitive in order to ensure safe operation in a given
+context.
+
+
+@item @code{/condition}
+@cindex /condition
+
+Some safety annotations may be conditional, in that they only apply if a
+boolean expression involving arguments, global variables or even the
+underlying kernel evaluates evaluates to true. Such conditions as
+@code{/hurd} or @code{/!linux!bsd} indicate the preceding marker only
+applies when the underlying kernel is the HURD, or when it is neither
+Linux nor a BSD kernel, respectively. @code{/!ps} and
+@code{/one_per_line} indicate the preceding marker only applies when
+argument @var{ps} is NULL, or global variable @var{one_per_line} is
+nonzero.
+
+When all marks that render a function unsafe are adorned with such
+conditions, and none of the named conditions hold, then the function can
+be regarded as safe.
+
+
+@end itemize
+
@node Berkeley Unix, SVID, POSIX, Standards and Portability
@subsection Berkeley Unix
diff --git a/libc/manual/job.texi b/libc/manual/job.texi
index d58dcd8c8..4e58f54e9 100644
--- a/libc/manual/job.texi
+++ b/libc/manual/job.texi
@@ -1039,6 +1039,10 @@ The function @code{ctermid} is declared in the header file
@comment stdio.h
@comment POSIX.1
@deftypefun {char *} ctermid (char *@var{string})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This function is a stub by default; the actual implementation, for
+@c posix systems, returns an internal buffer if passed a NULL string,
+@c but the internal buffer is always set to /dev/tty.
The @code{ctermid} function returns a string containing the file name of
the controlling terminal for the current process. If @var{string} is
not a null pointer, it should be an array that can hold at least
@@ -1075,6 +1079,12 @@ Your program should include the header files @file{sys/types.h} and
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t setsid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is usually a direct syscall, but if a syscall is not available,
+@c we use a stub, or Hurd- and BSD-specific implementations. The former
+@c uses a mutex and a hurd critical section, and the latter issues a few
+@c syscalls, so both seem safe, the locking on Hurd is safe because of
+@c the critical section.
The @code{setsid} function creates a new session. The calling process
becomes the session leader, and is put in a new process group whose
process group ID is the same as the process ID of that process. There
@@ -1098,6 +1108,8 @@ already another process group around that has the same process group ID.
@comment unistd.h
@comment SVID
@deftypefun pid_t getsid (pid_t @var{pid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Stub or direct syscall, except on hurd, where it is equally safe.
The @code{getsid} function returns the process group ID of the session
leader of the specified process. If a @var{pid} is @code{0}, the
@@ -1121,6 +1133,7 @@ from the calling process.
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t getpgrp (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getpgrp} function returns the process group ID of
the calling process.
@end deftypefun
@@ -1128,6 +1141,8 @@ the calling process.
@comment unistd.h
@comment POSIX.1
@deftypefun int getpgid (pid_t @var{pid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Stub or direct syscall, except on hurd, where it is equally safe.
The @code{getpgid} function
returns the process group ID of the process @var{pid}. You can supply a
@@ -1150,6 +1165,8 @@ process.
@comment unistd.h
@comment POSIX.1
@deftypefun int setpgid (pid_t @var{pid}, pid_t @var{pgid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Stub or direct syscall, except on hurd, where it is equally safe.
The @code{setpgid} function puts the process @var{pid} into the process
group @var{pgid}. As a special case, either @var{pid} or @var{pgid} can
be zero to indicate the process ID of the calling process.
@@ -1187,6 +1204,8 @@ process or a child of the calling process.
@comment unistd.h
@comment BSD
@deftypefun int setpgrp (pid_t @var{pid}, pid_t @var{pgid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall or setpgid wrapper.
This is the BSD Unix name for @code{setpgid}. Both functions do exactly
the same thing.
@end deftypefun
@@ -1209,6 +1228,8 @@ file itself and not a particular open file descriptor.
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t tcgetpgrp (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Stub, or ioctl on BSD and GNU/Linux.
This function returns the process group ID of the foreground process
group associated with the terminal open on descriptor @var{filedes}.
@@ -1237,6 +1258,8 @@ controlling terminal of the calling process.
@comment unistd.h
@comment POSIX.1
@deftypefun int tcsetpgrp (int @var{filedes}, pid_t @var{pgid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Stub, or ioctl on BSD and GNU/Linux.
This function is used to set a terminal's foreground process group ID.
The argument @var{filedes} is a descriptor which specifies the terminal;
@var{pgid} specifies the process group. The calling process must be a
@@ -1276,6 +1299,8 @@ process.
@comment termios.h
@comment Unix98
@deftypefun pid_t tcgetsid (int @var{fildes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Ioctl call, if available, or tcgetpgrp followed by getsid.
This function is used to obtain the process group ID of the session
for which the terminal specified by @var{fildes} is the controlling terminal.
If the call is successful the group ID is returned. Otherwise the
diff --git a/libc/manual/lang.texi b/libc/manual/lang.texi
index 7a556733e..28b21cbb7 100644
--- a/libc/manual/lang.texi
+++ b/libc/manual/lang.texi
@@ -51,6 +51,8 @@ without indicating anything might be wrong.
@comment assert.h
@comment ISO
@deftypefn Macro void assert (int @var{expression})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c assert_fail_base calls asprintf, and fflushes stderr.
Verify the programmer's belief that @var{expression} is nonzero at
this point in the program.
@@ -91,6 +93,8 @@ The @code{assert_perror} macro makes this easy.
@comment assert.h
@comment GNU
@deftypefn Macro void assert_perror (int @var{errnum})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c assert_fail_base calls asprintf, and fflushes stderr.
Similar to @code{assert}, but verifies that @var{errnum} is zero.
If @code{NDEBUG} is not defined, @code{assert_perror} tests the value of
@@ -423,6 +427,8 @@ The type @code{va_list} is used for argument pointer variables.
@comment stdarg.h
@comment ISO
@deftypefn {Macro} void va_start (va_list @var{ap}, @var{last-required})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is no longer provided by glibc, but rather by the compiler.
This macro initializes the argument pointer variable @var{ap} to point
to the first of the optional arguments of the current function;
@var{last-required} must be the last required argument to the function.
@@ -431,6 +437,11 @@ to the first of the optional arguments of the current function;
@comment stdarg.h
@comment ISO
@deftypefn {Macro} @var{type} va_arg (va_list @var{ap}, @var{type})
+@safety{@prelim{}@mtsafe{@mtsrace{:ap}}@assafe{}@acunsafe{@acucorrupt{}}}
+@c This is no longer provided by glibc, but rather by the compiler.
+@c Unlike the other va_ macros, that either start/end the lifetime of
+@c the va_list object or don't modify it, this one modifies ap, and it
+@c may leave it in a partially updated state.
The @code{va_arg} macro returns the value of the next optional argument,
and modifies the value of @var{ap} to point to the subsequent argument.
Thus, successive uses of @code{va_arg} return successive optional
@@ -445,6 +456,8 @@ of the actual argument.
@comment stdarg.h
@comment ISO
@deftypefn {Macro} void va_end (va_list @var{ap})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is no longer provided by glibc, but rather by the compiler.
This ends the use of @var{ap}. After a @code{va_end} call, further
@code{va_arg} calls with the same @var{ap} may not work. You should invoke
@code{va_end} before returning from the function in which @code{va_start}
@@ -466,6 +479,8 @@ of the same type.
@comment ISO
@deftypefn {Macro} void va_copy (va_list @var{dest}, va_list @var{src})
@deftypefnx {Macro} void __va_copy (va_list @var{dest}, va_list @var{src})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is no longer provided by glibc, but rather by the compiler.
The @code{va_copy} macro allows copying of objects of type
@code{va_list} even if this is not an integral type. The argument pointer
in @var{dest} is initialized to point to the same argument as the
@@ -1212,6 +1227,8 @@ type of a particular structure member.
@comment stddef.h
@comment ISO
@deftypefn {Macro} size_t offsetof (@var{type}, @var{member})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is no longer provided by glibc, but rather by the compiler.
This expands to an integer constant expression that is the offset of the
structure member named @var{member} in the structure type @var{type}.
For example, @code{offsetof (struct s, elem)} is the offset, in bytes,
diff --git a/libc/manual/libdl.texi b/libc/manual/libdl.texi
new file mode 100644
index 000000000..e3fe0452d
--- /dev/null
+++ b/libc/manual/libdl.texi
@@ -0,0 +1,10 @@
+@c FIXME these are undocumented:
+@c dladdr
+@c dladdr1
+@c dlclose
+@c dlerror
+@c dlinfo
+@c dlmopen
+@c dlopen
+@c dlsym
+@c dlvsym
diff --git a/libc/manual/llio.texi b/libc/manual/llio.texi
index 916edbd4f..69b54c283 100644
--- a/libc/manual/llio.texi
+++ b/libc/manual/llio.texi
@@ -78,6 +78,7 @@ declared in @file{unistd.h}.
@comment fcntl.h
@comment POSIX.1
@deftypefun int open (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
The @code{open} function creates and returns a new file descriptor for
the file named by @var{filename}. Initially, the file position
indicator for the file is at the beginning of the file. The argument
@@ -164,6 +165,7 @@ and @code{freopen} functions, that create streams.
@comment fcntl.h
@comment Unix98
@deftypefun int open64 (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function is similar to @code{open}. It returns a file descriptor
which can be used to access the file named by @var{filename}. The only
difference is that on 32 bit systems the file is opened in the
@@ -178,6 +180,7 @@ replaces the old API.
@comment fcntl.h
@comment POSIX.1
@deftypefn {Obsolete function} int creat (const char *@var{filename}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function is obsolete. The call:
@smallexample
@@ -202,6 +205,7 @@ since all of the lowlevel file handling functions are equally replaced.
@comment fcntl.h
@comment Unix98
@deftypefn {Obsolete function} int creat64 (const char *@var{filename}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function is similar to @code{creat}. It returns a file descriptor
which can be used to access the file named by @var{filename}. The only
the difference is that on 32 bit systems the file is opened in the
@@ -219,6 +223,7 @@ replaces the old API.
@comment unistd.h
@comment POSIX.1
@deftypefun int close (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
The function @code{close} closes the file descriptor @var{filedes}.
Closing a file has the following consequences:
@@ -300,6 +305,7 @@ but must be a signed type.
@comment unistd.h
@comment POSIX.1
@deftypefun ssize_t read (int @var{filedes}, void *@var{buffer}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{read} function reads up to @var{size} bytes from the file
with descriptor @var{filedes}, storing the results in the @var{buffer}.
(This is not necessarily a character string, and no terminating null
@@ -395,6 +401,10 @@ functions that read from streams, such as @code{fgetc}.
@comment unistd.h
@comment Unix98
@deftypefun ssize_t pread (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation
+@c is not MT-Safe because it uses lseek, read and lseek back, but is it
+@c used anywhere?
The @code{pread} function is similar to the @code{read} function. The
first three arguments are identical, and the return values and error
codes also correspond.
@@ -430,6 +440,10 @@ version 2.
@comment unistd.h
@comment Unix98
@deftypefun ssize_t pread64 (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation
+@c is not MT-Safe because it uses lseek64, read and lseek64 back, but is
+@c it used anywhere?
This function is similar to the @code{pread} function. The difference
is that the @var{offset} parameter is of type @code{off64_t} instead of
@code{off_t} which makes it possible on 32 bit machines to address
@@ -447,6 +461,7 @@ When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
@comment unistd.h
@comment POSIX.1
@deftypefun ssize_t write (int @var{filedes}, const void *@var{buffer}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{write} function writes up to @var{size} bytes from
@var{buffer} to the file with descriptor @var{filedes}. The data in
@var{buffer} is not necessarily a character string and a null character is
@@ -557,6 +572,10 @@ functions that write to streams, such as @code{fputc}.
@comment unistd.h
@comment Unix98
@deftypefun ssize_t pwrite (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation
+@c is not MT-Safe because it uses lseek, write and lseek back, but is it
+@c used anywhere?
The @code{pwrite} function is similar to the @code{write} function. The
first three arguments are identical, and the return values and error codes
also correspond.
@@ -592,6 +611,10 @@ version 2.
@comment unistd.h
@comment Unix98
@deftypefun ssize_t pwrite64 (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation
+@c is not MT-Safe because it uses lseek64, write and lseek64 back, but
+@c is it used anywhere?
This function is similar to the @code{pwrite} function. The difference
is that the @var{offset} parameter is of type @code{off64_t} instead of
@code{off_t} which makes it possible on 32 bit machines to address
@@ -624,6 +647,7 @@ To read the current file position value from a descriptor, use
@comment unistd.h
@comment POSIX.1
@deftypefun off_t lseek (int @var{filedes}, off_t @var{offset}, int @var{whence})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{lseek} function is used to change the file position of the
file with descriptor @var{filedes}.
@@ -713,6 +737,7 @@ descriptors.
@comment unistd.h
@comment Unix98
@deftypefun off64_t lseek64 (int @var{filedes}, off64_t @var{offset}, int @var{whence})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to the @code{lseek} function. The difference
is that the @var{offset} parameter is of type @code{off64_t} instead of
@code{off_t} which makes it possible on 32 bit machines to address
@@ -825,6 +850,7 @@ declared in the header file @file{stdio.h}.
@comment stdio.h
@comment POSIX.1
@deftypefun {FILE *} fdopen (int @var{filedes}, const char *@var{opentype})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
The @code{fdopen} function returns a new stream for the file descriptor
@var{filedes}.
@@ -853,6 +879,7 @@ see @ref{Creating a Pipe}.
@comment stdio.h
@comment POSIX.1
@deftypefun int fileno (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns the file descriptor associated with the stream
@var{stream}. If an error is detected (for example, if the @var{stream}
is not valid) or if @var{stream} does not do I/O to a file,
@@ -862,6 +889,7 @@ is not valid) or if @var{stream} does not do I/O to a file,
@comment stdio.h
@comment GNU
@deftypefun int fileno_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fileno_unlocked} function is equivalent to the @code{fileno}
function except that it does not implicitly lock the stream if the state
is @code{FSETLOCKING_INTERNAL}.
@@ -1071,6 +1099,11 @@ Contains the length of the buffer.
@comment sys/uio.h
@comment BSD
@deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c The fallback sysdeps/posix implementation, used even on GNU/Linux
+@c with old kernels that lack a full readv/writev implementation, may
+@c malloc the buffer into which data is read, if the total read size is
+@c too large for alloca.
The @code{readv} function reads data from @var{filedes} and scatters it
into the buffers described in @var{vector}, which is taken to be
@@ -1089,6 +1122,11 @@ errors are the same as in @code{read}.
@comment sys/uio.h
@comment BSD
@deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c The fallback sysdeps/posix implementation, used even on GNU/Linux
+@c with old kernels that lack a full readv/writev implementation, may
+@c malloc the buffer from which data is written, if the total write size
+@c is too large for alloca.
The @code{writev} function gathers data from the buffers described in
@var{vector}, which is taken to be @var{count} structures long, and writes
@@ -1149,6 +1187,7 @@ These functions are declared in @file{sys/mman.h}.
@comment sys/mman.h
@comment POSIX
@deftypefun {void *} mmap (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{mmap} function creates a new mapping, connected to bytes
(@var{offset}) to (@var{offset} + @var{length} - 1) in the file open on
@@ -1268,6 +1307,9 @@ The file is on a filesystem that doesn't support mapping.
@comment sys/mman.h
@comment LFS
@deftypefun {void *} mmap64 (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off64_t @var{offset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c The page_shift auto detection when MMAP2_PAGE_SHIFT is -1 (it never
+@c is) would be thread-unsafe.
The @code{mmap64} function is equivalent to the @code{mmap} function but
the @var{offset} parameter is of type @code{off64_t}. On 32-bit systems
this allows the file associated with the @var{filedes} descriptor to be
@@ -1284,6 +1326,7 @@ replaces the old API.
@comment sys/mman.h
@comment POSIX
@deftypefun int munmap (void *@var{addr}, size_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} +
@var{length}). @var{length} should be the length of the mapping.
@@ -1310,6 +1353,7 @@ aligned.
@comment sys/mman.h
@comment POSIX
@deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
When using shared mappings, the kernel can write the file at any time
before the mapping is removed. To be certain data has actually been
@@ -1357,6 +1401,7 @@ There is no existing mapping in at least part of the given region.
@comment sys/mman.h
@comment GNU
@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function can be used to change the size of an existing memory
area. @var{address} and @var{length} must cover a region entirely mapped
@@ -1405,6 +1450,7 @@ Coding Standards}.
@comment sys/mman.h
@comment POSIX
@deftypefun int madvise (void *@var{addr}, size_t @var{length}, int @var{advice})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function can be used to provide the system with @var{advice} about
the intended usage patterns of the memory region starting at @var{addr}
@@ -1474,6 +1520,24 @@ There is no existing mapping in at least part of the given region.
@comment sys/mman.h
@comment POSIX
@deftypefn Function int shm_open (const char *@var{name}, int @var{oflag}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c shm_open @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_once(where_is_shmfs) @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
+@c where_is_shmfs @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c statfs dup ok
+@c setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c getmntent_r dup @mtslocale @ascuheap @aculock @acsmem [no @asucorrupt @acucorrupt; exclusive stream]
+@c strcmp dup ok
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c strlen dup ok
+@c strchr dup ok
+@c mempcpy dup ok
+@c open dup @acsfd
+@c fcntl dup ok
+@c close dup @acsfd
This function returns a file descriptor that can be used to allocate shared
memory via mmap. Unrelated processes can use same @var{name} to create or
@@ -1490,6 +1554,13 @@ On failure @code{errno} is set.
@end deftypefn
@deftypefn Function int shm_unlink (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c shm_unlink @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_once(where_is_shmfs) dup @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
+@c strlen dup ok
+@c strchr dup ok
+@c mempcpy dup ok
+@c unlink dup ok
This function is inverse of @code{shm_open} and removes the object with
the given @var{name} previously created by @code{shm_open}.
@@ -1558,6 +1629,7 @@ that descriptor into an @code{fd_set}.
@comment sys/types.h
@comment BSD
@deftypefn Macro void FD_ZERO (fd_set *@var{set})
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
This macro initializes the file descriptor set @var{set} to be the
empty set.
@end deftypefn
@@ -1565,6 +1637,9 @@ empty set.
@comment sys/types.h
@comment BSD
@deftypefn Macro void FD_SET (int @var{filedes}, fd_set *@var{set})
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
+@c Setting a bit isn't necessarily atomic, so there's a potential race
+@c here if set is not used exclusively.
This macro adds @var{filedes} to the file descriptor set @var{set}.
The @var{filedes} parameter must not have side effects since it is
@@ -1574,6 +1649,9 @@ evaluated more than once.
@comment sys/types.h
@comment BSD
@deftypefn Macro void FD_CLR (int @var{filedes}, fd_set *@var{set})
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
+@c Setting a bit isn't necessarily atomic, so there's a potential race
+@c here if set is not used exclusively.
This macro removes @var{filedes} from the file descriptor set @var{set}.
The @var{filedes} parameter must not have side effects since it is
@@ -1583,6 +1661,7 @@ evaluated more than once.
@comment sys/types.h
@comment BSD
@deftypefn Macro int FD_ISSET (int @var{filedes}, const fd_set *@var{set})
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
This macro returns a nonzero value (true) if @var{filedes} is a member
of the file descriptor set @var{set}, and zero (false) otherwise.
@@ -1595,6 +1674,10 @@ Next, here is the description of the @code{select} function itself.
@comment sys/types.h
@comment BSD
@deftypefun int select (int @var{nfds}, fd_set *@var{read-fds}, fd_set *@var{write-fds}, fd_set *@var{except-fds}, struct timeval *@var{timeout})
+@safety{@prelim{}@mtsafe{@mtsrace{:read-fds} @mtsrace{:write-fds} @mtsrace{:except-fds}}@assafe{}@acsafe{}}
+@c The select syscall is preferred, but pselect6 may be used instead,
+@c which requires converting timeout to a timespec and back. The
+@c conversions are not atomic.
The @code{select} function blocks the calling process until there is
activity on any of the specified sets of file descriptors, or until the
timeout period has expired.
@@ -1697,6 +1780,7 @@ they return.
@comment unistd.h
@comment X/Open
@deftypefun void sync (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
A call to this function will not return as long as there is data which
has not been written to the device. All dirty buffers in the kernel will
be written and so an overall consistent system can be achieved (if no
@@ -1712,6 +1796,7 @@ committed, rather than all data in the system. For this, @code{sync} is overkil
@comment unistd.h
@comment POSIX
@deftypefun int fsync (int @var{fildes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fsync} function can be used to make sure all data associated with
the open file @var{fildes} is written to the device associated with the
descriptor. The function call does not return unless all actions have
@@ -1749,6 +1834,7 @@ recovering of the file in case of a problem.
@comment unistd.h
@comment POSIX
@deftypefun int fdatasync (int @var{fildes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
When a call to the @code{fdatasync} function returns, it is ensured
that all of the file data is written to the device. For all pending I/O
operations, the parts guaranteeing data integrity finished.
@@ -1950,6 +2036,158 @@ aiocb64}, since the LFS transparently replaces the old interface.
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_read (struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c Calls aio_enqueue_request.
+@c aio_enqueue_request @asulock @ascuheap @aculock @acsmem
+@c pthread_self ok
+@c pthread_getschedparam @asulock @aculock
+@c lll_lock (pthread descriptor's lock) @asulock @aculock
+@c sched_getparam ok
+@c sched_getscheduler ok
+@c lll_unlock @aculock
+@c pthread_mutex_lock (aio_requests_mutex) @asulock @aculock
+@c get_elem @ascuheap @acsmem [@asucorrupt @acucorrupt]
+@c realloc @ascuheap @acsmem
+@c calloc @ascuheap @acsmem
+@c aio_create_helper_thread @asulock @ascuheap @aculock @acsmem
+@c pthread_attr_init ok
+@c pthread_attr_setdetachstate ok
+@c pthread_get_minstack ok
+@c pthread_attr_setstacksize ok
+@c sigfillset ok
+@c memset ok
+@c sigdelset ok
+@c SYSCALL rt_sigprocmask ok
+@c pthread_create @asulock @ascuheap @aculock @acsmem
+@c lll_lock (default_pthread_attr_lock) @asulock @aculock
+@c alloca/malloc @ascuheap @acsmem
+@c lll_unlock @aculock
+@c allocate_stack @asulock @ascuheap @aculock @acsmem
+@c getpagesize dup
+@c lll_lock (default_pthread_attr_lock) @asulock @aculock
+@c lll_unlock @aculock
+@c _dl_allocate_tls @ascuheap @acsmem
+@c _dl_allocate_tls_storage @ascuheap @acsmem
+@c memalign @ascuheap @acsmem
+@c memset ok
+@c allocate_dtv dup
+@c free @ascuheap @acsmem
+@c allocate_dtv @ascuheap @acsmem
+@c calloc @ascuheap @acsmem
+@c INSTALL_DTV ok
+@c list_add dup
+@c get_cached_stack
+@c lll_lock (stack_cache_lock) @asulock @aculock
+@c list_for_each ok
+@c list_entry dup
+@c FREE_P dup
+@c stack_list_del dup
+@c stack_list_add dup
+@c lll_unlock @aculock
+@c _dl_allocate_tls_init ok
+@c GET_DTV ok
+@c mmap ok
+@c atomic_increment_val ok
+@c munmap ok
+@c change_stack_perm ok
+@c mprotect ok
+@c mprotect ok
+@c stack_list_del dup
+@c _dl_deallocate_tls dup
+@c munmap ok
+@c THREAD_COPY_STACK_GUARD ok
+@c THREAD_COPY_POINTER_GUARD ok
+@c atomic_exchange_acq ok
+@c lll_futex_wake ok
+@c deallocate_stack @asulock @ascuheap @aculock @acsmem
+@c lll_lock (state_cache_lock) @asulock @aculock
+@c stack_list_del ok
+@c atomic_write_barrier ok
+@c list_del ok
+@c atomic_write_barrier ok
+@c queue_stack @ascuheap @acsmem
+@c stack_list_add ok
+@c atomic_write_barrier ok
+@c list_add ok
+@c atomic_write_barrier ok
+@c free_stacks @ascuheap @acsmem
+@c list_for_each_prev_safe ok
+@c list_entry ok
+@c FREE_P ok
+@c stack_list_del dup
+@c _dl_deallocate_tls dup
+@c munmap ok
+@c _dl_deallocate_tls @ascuheap @acsmem
+@c free @ascuheap @acsmem
+@c lll_unlock @aculock
+@c create_thread @asulock @ascuheap @aculock @acsmem
+@c td_eventword
+@c td_eventmask
+@c do_clone @asulock @ascuheap @aculock @acsmem
+@c PREPARE_CREATE ok
+@c lll_lock (pd->lock) @asulock @aculock
+@c atomic_increment ok
+@c clone ok
+@c atomic_decrement ok
+@c atomic_exchange_acq ok
+@c lll_futex_wake ok
+@c deallocate_stack dup
+@c sched_setaffinity ok
+@c tgkill ok
+@c sched_setscheduler ok
+@c atomic_compare_and_exchange_bool_acq ok
+@c nptl_create_event ok
+@c lll_unlock (pd->lock) @aculock
+@c free @ascuheap @acsmem
+@c pthread_attr_destroy ok (cpuset won't be set, so free isn't called)
+@c add_request_to_runlist ok
+@c pthread_cond_signal ok
+@c aio_free_request ok
+@c pthread_mutex_unlock @aculock
+
+@c (in the new thread, initiated with clone)
+@c start_thread ok
+@c HP_TIMING_NOW ok
+@c ctype_init @mtslocale
+@c atomic_exchange_acq ok
+@c lll_futex_wake ok
+@c sigemptyset ok
+@c sigaddset ok
+@c setjmp ok
+@c CANCEL_ASYNC -> pthread_enable_asynccancel ok
+@c do_cancel ok
+@c pthread_unwind ok
+@c Unwind_ForcedUnwind or longjmp ok [@ascuheap @acsmem?]
+@c lll_lock @asulock @aculock
+@c lll_unlock @asulock @aculock
+@c CANCEL_RESET -> pthread_disable_asynccancel ok
+@c lll_futex_wait ok
+@c ->start_routine ok -----
+@c call_tls_dtors @asulock @ascuheap @aculock @acsmem
+@c user-supplied dtor
+@c rtld_lock_lock_recursive (dl_load_lock) @asulock @aculock
+@c rtld_lock_unlock_recursive @aculock
+@c free @ascuheap @acsmem
+@c nptl_deallocate_tsd @ascuheap @acsmem
+@c tsd user-supplied dtors ok
+@c free @ascuheap @acsmem
+@c libc_thread_freeres
+@c libc_thread_subfreeres ok
+@c atomic_decrement_and_test ok
+@c td_eventword ok
+@c td_eventmask ok
+@c atomic_compare_exchange_bool_acq ok
+@c nptl_death_event ok
+@c lll_robust_dead ok
+@c getpagesize ok
+@c madvise ok
+@c free_tcb @asulock @ascuheap @aculock @acsmem
+@c free @ascuheap @acsmem
+@c deallocate_stack @asulock @ascuheap @aculock @acsmem
+@c lll_futex_wait ok
+@c exit_thread_inline ok
+@c syscall(exit) ok
+
This function initiates an asynchronous read operation. It
immediately returns after the operation was enqueued or when an
error was encountered.
@@ -2015,6 +2253,7 @@ replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_read64 (struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function is similar to the @code{aio_read} function. The only
difference is that on @w{32 bit} machines, the file descriptor should
be opened in the large file mode. Internally, @code{aio_read64} uses
@@ -2033,6 +2272,7 @@ of functions with a very similar interface.
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_write (struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function initiates an asynchronous write operation. The function
call immediately returns after the operation was enqueued or if before
this happens an error was encountered.
@@ -2099,6 +2339,7 @@ replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_write64 (struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function is similar to the @code{aio_write} function. The only
difference is that on @w{32 bit} machines the file descriptor should
be opened in the large file mode. Internally @code{aio_write64} uses
@@ -2120,6 +2361,12 @@ operations. It is therefore similar to a combination of @code{readv} and
@comment aio.h
@comment POSIX.1b
@deftypefun int lio_listio (int @var{mode}, struct aiocb *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c Call lio_listio_internal, that takes the aio_requests_mutex lock and
+@c enqueues each request. Then, it waits for notification or prepares
+@c for it before releasing the lock. Even though it performs memory
+@c allocation and locking of its own, it doesn't add any classes of
+@c safety issues that aren't already covered by aio_enqueue_request.
The @code{lio_listio} function can be used to enqueue an arbitrary
number of read and write requests at one time. The requests can all be
meant for the same file, all for different files or every solution in
@@ -2203,6 +2450,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int lio_listio64 (int @var{mode}, struct aiocb64 *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function is similar to the @code{lio_listio} function. The only
difference is that on @w{32 bit} machines, the file descriptor should
be opened in the large file mode. Internally, @code{lio_listio64} uses
@@ -2231,6 +2479,7 @@ The following two functions allow you to get this kind of information.
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_error (const struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function determines the error state of the request described by the
@code{struct aiocb} variable pointed to by @var{aiocbp}. If the
request has not yet terminated the value returned is always
@@ -2252,6 +2501,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_error64 (const struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{aio_error} with the only difference
that the argument is a reference to a variable of type @code{struct
aiocb64}.
@@ -2265,6 +2515,7 @@ machines.
@comment aio.h
@comment POSIX.1b
@deftypefun ssize_t aio_return (struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function can be used to retrieve the return status of the operation
carried out by the request described in the variable pointed to by
@var{aiocbp}. As long as the error status of this request as returned
@@ -2288,6 +2539,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun ssize_t aio_return64 (struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{aio_return} with the only difference
that the argument is a reference to a variable of type @code{struct
aiocb64}.
@@ -2316,6 +2568,9 @@ if the symbol @code{_POSIX_SYNCHRONIZED_IO} is defined in @file{unistd.h}.
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_fsync (int @var{op}, struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c After fcntl to check that the FD is open, it calls
+@c aio_enqueue_request.
Calling this function forces all I/O operations operating queued at the
time of the function call operating on the file descriptor
@code{aiocbp->aio_fildes} into the synchronized I/O completion state
@@ -2363,6 +2618,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_fsync64 (int @var{op}, struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function is similar to @code{aio_fsync} with the only difference
that the argument is a reference to a variable of type @code{struct
aiocb64}.
@@ -2389,6 +2645,9 @@ before the current client is served. For situations like this
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_suspend (const struct aiocb *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Take aio_requests_mutex, set up waitlist and requestlist, wait
+@c for completion or timeout, and release the mutex.
When calling this function, the calling thread is suspended until at
least one of the requests pointed to by the @var{nent} elements of the
array @var{list} has completed. If any of the requests has already
@@ -2427,6 +2686,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_suspend64 (const struct aiocb64 *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
This function is similar to @code{aio_suspend} with the only difference
that the argument is a reference to a variable of type @code{struct
aiocb64}.
@@ -2454,6 +2714,16 @@ or not. Therefore using this function is merely a hint.
@comment aio.h
@comment POSIX.1b
@deftypefun int aio_cancel (int @var{fildes}, struct aiocb *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c After fcntl to check the fd is open, hold aio_requests_mutex, call
+@c aio_find_req_fd, aio_remove_request, then aio_notify and
+@c aio_free_request each request before releasing the lock.
+@c aio_notify calls aio_notify_only and free, besides cond signal or
+@c similar. aio_notify_only calls pthread_attr_init,
+@c pthread_attr_setdetachstate, malloc, pthread_create,
+@c notify_func_wrapper, aio_sigqueue, getpid, raise.
+@c notify_func_wraper calls aio_start_notify_thread, free and then the
+@c notifier function.
The @code{aio_cancel} function can be used to cancel one or more
outstanding requests. If the @var{aiocbp} parameter is @code{NULL}, the
function tries to cancel all of the outstanding requests which would process
@@ -2501,6 +2771,7 @@ transparently replaces the normal implementation.
@comment aio.h
@comment Unix98
@deftypefun int aio_cancel64 (int @var{fildes}, struct aiocb64 *@var{aiocbp})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
This function is similar to @code{aio_cancel} with the only difference
that the argument is a reference to a variable of type @code{struct
aiocb64}.
@@ -2556,6 +2827,8 @@ Unused.
@comment aio.h
@comment GNU
@deftypefun void aio_init (const struct aioinit *@var{init})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c All changes to global objects are guarded by aio_requests_mutex.
This function must be called before any other AIO function. Calling it
is completely voluntary, as it is only meant to help the AIO
implementation perform better.
@@ -2590,6 +2863,7 @@ function; see @ref{Opening and Closing Files}.
@comment fcntl.h
@comment POSIX.1
@deftypefun int fcntl (int @var{filedes}, int @var{command}, @dots{})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{fcntl} function performs the operation specified by
@var{command} on the file descriptor @var{filedes}. Some commands
require additional arguments to be supplied. These additional arguments
@@ -2672,6 +2946,7 @@ while prototypes for @code{dup} and @code{dup2} are in the header file
@comment unistd.h
@comment POSIX.1
@deftypefun int dup (int @var{old})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function copies descriptor @var{old} to the first available
descriptor number (the first number not currently open). It is
equivalent to @code{fcntl (@var{old}, F_DUPFD, 0)}.
@@ -2680,6 +2955,7 @@ equivalent to @code{fcntl (@var{old}, F_DUPFD, 0)}.
@comment unistd.h
@comment POSIX.1
@deftypefun int dup2 (int @var{old}, int @var{new})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function copies the descriptor @var{old} to descriptor number
@var{new}.
@@ -3658,6 +3934,7 @@ different headers.
@comment sys/ioctl.h
@comment BSD
@deftypefun int ioctl (int @var{filedes}, int @var{command}, @dots{})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{ioctl} function performs the generic I/O operation
@var{command} on @var{filedes}.
@@ -3677,3 +3954,6 @@ unknown device.
Most IOCTLs are OS-specific and/or only used in special system utilities,
and are thus beyond the scope of this document. For an example of the use
of an IOCTL, see @ref{Out-of-Band Data}.
+
+@c FIXME this is undocumented:
+@c dup3
diff --git a/libc/manual/locale.texi b/libc/manual/locale.texi
index a11c7d854..8bfd653ed 100644
--- a/libc/manual/locale.texi
+++ b/libc/manual/locale.texi
@@ -224,6 +224,136 @@ The symbols in this section are defined in the header file @file{locale.h}.
@comment locale.h
@comment ISO
@deftypefun {char *} setlocale (int @var{category}, const char *@var{locale})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtslocale{}} @mtsenv{}}@asunsafe{@asuinit{} @asulock{} @ascuheap{} @asucorrupt{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Uses of the global locale object are unguarded in functions that
+@c ought to be MT-Safe, so we're ruling out the use of this function
+@c once threads are started. It takes a write lock itself, but it may
+@c return a pointer loaded from the global locale object after releasing
+@c the lock, or before taking it.
+@c setlocale @mtasuconst:@mtslocale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock
+@c libc_rwlock_wrlock @asulock @aculock
+@c libc_rwlock_unlock @aculock
+@c getenv LOCPATH @mtsenv
+@c malloc @ascuheap @acsmem
+@c free @ascuheap @acsmem
+@c new_composite_name ok
+@c setdata ok
+@c setname ok
+@c _nl_find_locale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock
+@c getenv LC_ALL and LANG @mtsenv
+@c _nl_load_locale_from_archive @ascuheap @acucorrupt @acsmem @acsfd
+@c sysconf _SC_PAGE_SIZE ok
+@c _nl_normalize_codeset @ascuheap @acsmem
+@c isalnum_l ok (C locale)
+@c isdigit_l ok (C locale)
+@c malloc @ascuheap @acsmem
+@c tolower_l ok (C locale)
+@c open_not_cancel_2 @acsfd
+@c fxstat64 ok
+@c close_not_cancel_no_status ok
+@c __mmap64 @acsmem
+@c calculate_head_size ok
+@c __munmap ok
+@c compute_hashval ok
+@c qsort dup @acucorrupt
+@c rangecmp ok
+@c malloc @ascuheap @acsmem
+@c strdup @ascuheap @acsmem
+@c _nl_intern_locale_data @ascuheap @acsmem
+@c malloc @ascuheap @acsmem
+@c free @ascuheap @acsmem
+@c _nl_expand_alias @ascuheap @asulock @acsmem @acsfd @aculock
+@c libc_lock_lock @asulock @aculock
+@c bsearch ok
+@c alias_compare ok
+@c strcasecmp ok
+@c read_alias_file @ascuheap @asulock @acsmem @acsfd @aculock
+@c fopen @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking ok
+@c feof_unlocked ok
+@c fgets_unlocked ok
+@c isspace ok (locale mutex is locked)
+@c extend_alias_table @ascuheap @acsmem
+@c realloc @ascuheap @acsmem
+@c realloc @ascuheap @acsmem
+@c fclose @ascuheap @asulock @acsmem @acsfd @aculock
+@c qsort @ascuheap @acsmem
+@c alias_compare dup
+@c libc_lock_unlock @aculock
+@c _nl_explode_name @ascuheap @acsmem
+@c _nl_find_language ok
+@c _nl_normalize_codeset dup @ascuheap @acsmem
+@c _nl_make_l10nflist @ascuheap @acsmem
+@c malloc @ascuheap @acsmem
+@c free @ascuheap @acsmem
+@c __argz_stringify ok
+@c __argz_count ok
+@c __argz_next ok
+@c _nl_load_locale @ascuheap @acsmem @acsfd
+@c open_not_cancel_2 @acsfd
+@c __fxstat64 ok
+@c close_not_cancel_no_status ok
+@c mmap @acsmem
+@c malloc @ascuheap @acsmem
+@c read_not_cancel ok
+@c free @ascuheap @acsmem
+@c _nl_intern_locale_data dup @ascuheap @acsmem
+@c munmap ok
+@c __gconv_compare_alias @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock
+@c __gconv_read_conf @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock
+@c (libc_once-initializes gconv_cache and gconv_path_envvar; they're
+@c never modified afterwards)
+@c __gconv_load_cache @ascuheap @acsmem @acsfd
+@c getenv GCONV_PATH @mtsenv
+@c open_not_cancel @acsfd
+@c __fxstat64 ok
+@c close_not_cancel_no_status ok
+@c mmap @acsmem
+@c malloc @ascuheap @acsmem
+@c __read ok
+@c free @ascuheap @acsmem
+@c munmap ok
+@c __gconv_get_path @asulock @ascuheap @aculock @acsmem @acsfd
+@c getcwd @ascuheap @acsmem @acsfd
+@c libc_lock_lock @asulock @aculock
+@c malloc @ascuheap @acsmem
+@c strtok_r ok
+@c libc_lock_unlock @aculock
+@c read_conf_file @ascuheap @asucorrupt @asulock @acsmem @acucorrupt @acsfd @aculock
+@c fopen @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking ok
+@c feof_unlocked ok
+@c getdelim @ascuheap @asucorrupt @acsmem @acucorrupt
+@c isspace_l ok (C locale)
+@c add_alias
+@c isspace_l ok (C locale)
+@c toupper_l ok (C locale)
+@c add_alias2 dup @ascuheap @acucorrupt @acsmem
+@c add_module @ascuheap @acsmem
+@c isspace_l ok (C locale)
+@c toupper_l ok (C locale)
+@c strtol ok (@mtslocale but we hold the locale lock)
+@c tfind __gconv_alias_db ok
+@c __gconv_alias_compare dup ok
+@c calloc @ascuheap @acsmem
+@c insert_module dup @ascuheap
+@c __tfind ok (because the tree is read only by then)
+@c __gconv_alias_compare dup ok
+@c insert_module @ascuheap
+@c free @ascuheap
+@c add_alias2 @ascuheap @acucorrupt @acsmem
+@c detect_conflict ok, reads __gconv_modules_db
+@c malloc @ascuheap @acsmem
+@c tsearch __gconv_alias_db @ascuheap @acucorrupt @acsmem [exclusive tree, no @mtsrace]
+@c __gconv_alias_compare ok
+@c free @ascuheap
+@c __gconv_compare_alias_cache ok
+@c find_module_idx ok
+@c do_lookup_alias ok
+@c __tfind ok (because the tree is read only by then)
+@c __gconv_alias_compare ok
+@c strndup @ascuheap @acsmem
+@c strcasecmp_l ok (C locale)
The function @code{setlocale} sets the current locale for category
@var{category} to @var{locale}. A list of all the locales the system
provides can be created by running
@@ -414,6 +544,10 @@ according to the selected locale using this information.
@comment locale.h
@comment ISO
@deftypefun {struct lconv *} localeconv (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:localeconv} @mtslocale{}}@asunsafe{}@acsafe{}}
+@c This function reads from multiple components of the locale object,
+@c without synchronization, while writing to the static buffer it uses
+@c as the return value.
The @code{localeconv} function returns a pointer to a structure whose
components contain information about how numeric and monetary values
should be formatted in the current locale.
@@ -680,6 +814,9 @@ was introduced.
@comment langinfo.h
@comment XOPEN
@deftypefun {char *} nl_langinfo (nl_item @var{item})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c It calls _nl_langinfo_l with the current locale, which returns a
+@c pointer into constant strings defined in locale data structures.
The @code{nl_langinfo} function can be used to access individual
elements of the locale categories. Unlike the @code{localeconv}
function, which returns all the information, @code{nl_langinfo}
@@ -974,6 +1111,11 @@ locale information, making it easier for the user to format
numbers according to these rules.
@deftypefun ssize_t strfmon (char *@var{s}, size_t @var{maxsize}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c It (and strfmon_l) both call vstrfmon_l, which, besides accessing the
+@c locale object passed to it, accesses the active locale through
+@c isdigit (but to_digit assumes ASCII digits only). It may call
+@c __printf_fp (@mtslocale @ascuheap @acsmem) and guess_grouping (safe).
The @code{strfmon} function is similar to the @code{strftime} function
in that it takes a buffer, its size, a format string,
and values to write into the buffer as text in a form specified
@@ -1185,6 +1327,10 @@ access to the corresponding locale definitions.
@comment GNU
@comment stdlib.h
@deftypefun int rpmatch (const char *@var{response})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c Calls nl_langinfo with YESEXPR and NOEXPR, triggering @mtslocale but
+@c it's regcomp and regexec that bring in all of the safety issues.
+@c regfree is also called, but it doesn't introduce any further issues.
The function @code{rpmatch} checks the string in @var{response} whether
or not it is a correct yes-or-no answer and if yes, which one. The
check uses the @code{YESEXPR} and @code{NOEXPR} data in the
diff --git a/libc/manual/macros.texi b/libc/manual/macros.texi
index daaf1c0aa..f32c86dc2 100644
--- a/libc/manual/macros.texi
+++ b/libc/manual/macros.texi
@@ -35,16 +35,225 @@ non-GNU systems
GNU/Linux and GNU/Hurd systems
@end macro
-@c Descrption applying to GNU/Hurd systems; that is, systems using the
+@c Description applying to GNU/Hurd systems; that is, systems using the
@c GNU Hurd with the GNU C Library.
@macro gnuhurdsystems
GNU/Hurd systems
@end macro
-@c Descrption applying to GNU/Linux systems; that is, systems using
+@c Description applying to GNU/Linux systems; that is, systems using
@c the Linux kernel with the GNU C Library.
@macro gnulinuxsystems
GNU/Linux systems
@end macro
+@c Document the safety functions as preliminary. It does NOT expand its
+@c comments.
+@macro prelim {comments}
+Preliminary:
+
+@end macro
+@c Document a function as thread safe.
+@macro mtsafe {comments}
+| MT-Safe \comments\
+
+@end macro
+@c Document a function as thread unsafe.
+@macro mtunsafe {comments}
+| MT-Unsafe \comments\
+
+@end macro
+@c Document a function as safe for use in asynchronous signal handlers.
+@macro assafe {comments}
+| AS-Safe \comments\
+
+@end macro
+@c Document a function as unsafe for use in asynchronous signal
+@c handlers. This distinguishes unmarked functions, for which this
+@c property has not been assessed, from those that have been analyzed.
+@macro asunsafe {comments}
+| AS-Unsafe \comments\
+
+@end macro
+@c Document a function as safe for use when asynchronous cancellation is
+@c enabled.
+@macro acsafe {comments}
+| AC-Safe \comments\
+
+@end macro
+@c Document a function as unsafe for use when asynchronous cancellation
+@c is enabled. This distinguishes unmarked functions, for which this
+@c property has not been assessed, from those that have been analyzed.
+@macro acunsafe {comments}
+| AC-Unsafe \comments\
+
+@end macro
+@c Format safety properties without referencing the section of the
+@c definitions. To be used in the definitions of the properties
+@c themselves.
+@macro sampsafety {notes}
+@noindent
+\notes\|
+
+
+@end macro
+@c Format the safety properties of a function.
+@macro safety {notes}
+\notes\| @xref{POSIX Safety Concepts}.
+
+
+@end macro
+@c Function is MT- and AS-Unsafe due to an internal race.
+@macro mtasurace {comments}
+race\comments\
+@end macro
+@c Function is AS-Unsafe due to an internal race.
+@macro asurace {comments}
+race\comments\
+@end macro
+@c Function is MT-Safe, but with potential race on user-supplied object
+@c of opaque type.
+@macro mtsrace {comments}
+race\comments\
+@end macro
+@c Function is MT- and AS-Unsafe for modifying an object that is decreed
+@c MT-constant due to MT-Unsafe accesses elsewhere.
+@macro mtasuconst {comments}
+const\comments\
+@end macro
+@c Function accesses the assumed-constant locale object.
+@macro mtslocale {comments}
+locale\comments\
+@end macro
+@c Function accesses the assumed-constant environment.
+@macro mtsenv {comments}
+env\comments\
+@end macro
+@c Function accesses the assumed-constant hostid.
+@macro mtshostid {comments}
+hostid\comments\
+@end macro
+@c Function accesses the assumed-constant _sigintr variable.
+@macro mtssigintr {comments}
+sigintr\comments\
+@end macro
+@c Function performs MT-Unsafe initialization at the first call.
+@macro mtuinit {comments}
+init\comments\
+@end macro
+@c Function performs libc_once AS-Unsafe initialization.
+@macro asuinit {comments}
+init\comments\
+@end macro
+@c Function performs libc_once AC-Unsafe initialization.
+@macro acuinit {comments}
+init\comments\
+@end macro
+@c Function is AS-Unsafe because it takes a non-recursive mutex that may
+@c already be held by the function interrupted by the signal.
+@macro asulock {comments}
+lock\comments\
+@end macro
+@c Function is AC-Unsafe because it may fail to release a mutex.
+@macro aculock {comments}
+lock\comments\
+@end macro
+@c Function is AS-Unsafe because some data structure may be inconsistent
+@c due to an ongoing updated interrupted by a signal.
+@macro asucorrupt {comments}
+corrupt\comments\
+@end macro
+@c Function is AC-Unsafe because some data structure may be left
+@c inconsistent when cancelled.
+@macro acucorrupt {comments}
+corrupt\comments\
+@end macro
+@c Function is AS- and AC-Unsafe because of malloc/free.
+@macro ascuheap {comments}
+heap\comments\
+@end macro
+@c Function is AS-Unsafe because of malloc/free.
+@macro asuheap {comments}
+heap\comments\
+@end macro
+@c Function is AS- and AC-Unsafe because of dlopen/dlclose.
+@macro ascudlopen {comments}
+dlopen\comments\
+@end macro
+@c Function is AS- and AC-Unsafe because of unknown plugins.
+@macro ascuplugin {comments}
+plugin\comments\
+@end macro
+@c Function is AS- and AC-Unsafe because of i18n.
+@macro ascuintl {comments}
+i18n\comments\
+@end macro
+@c Function is AS--Unsafe because of i18n.
+@macro asuintl {comments}
+i18n\comments\
+@end macro
+@c Function may leak file descriptors if async-cancelled.
+@macro acsfd {comments}
+fd\comments\
+@end macro
+@c Function may leak memory if async-cancelled.
+@macro acsmem {comments}
+mem\comments\
+@end macro
+@c Function is unsafe due to temporary overriding a signal handler.
+@macro mtascusig {comments}
+sig\comments\
+@end macro
+@c Function is MT- and AS-Unsafe due to temporarily changing attributes
+@c of the controlling terminal.
+@macro mtasuterm {comments}
+term\comments\
+@end macro
+@c Function is AC-Unsafe for failing to restore attributes of the
+@c controlling terminal.
+@macro acuterm {comments}
+term\comments\
+@end macro
+@c Function sets timers atomically.
+@macro mtstimer {comments}
+timer\comments\
+@end macro
+@c Function sets and restores timers.
+@macro mtascutimer {comments}
+timer\comments\
+@end macro
+@c Function temporarily changes the current working directory.
+@macro mtasscwd {comments}
+cwd\comments\
+@end macro
+@c Function may fail to restore to the original current working
+@c directory after temporarily changing it.
+@macro acscwd {comments}
+cwd\comments\
+@end macro
+@c Function is MT-Safe while POSIX says it needn't be MT-Safe.
+@macro mtsposix {comments}
+!posix\comments\
+@end macro
+@c Function is MT-Unsafe while POSIX says it should be MT-Safe.
+@macro mtuposix {comments}
+!posix\comments\
+@end macro
+@c Function is AS-Safe while POSIX says it needn't be AS-Safe.
+@macro assposix {comments}
+!posix\comments\
+@end macro
+@c Function is AS-Unsafe while POSIX says it should be AS-Safe.
+@macro asuposix {comments}
+!posix\comments\
+@end macro
+@c Function is AC-Safe while POSIX says it needn't be AC-Safe.
+@macro acsposix {comments}
+!posix\comments\
+@end macro
+@c Function is AC-Unsafe while POSIX says it should be AC-Safe.
+@macro acuposix {comments}
+!posix\comments\
+@end macro
+
@end ifclear
diff --git a/libc/manual/math.texi b/libc/manual/math.texi
index 5e7c90e2e..152744147 100644
--- a/libc/manual/math.texi
+++ b/libc/manual/math.texi
@@ -157,6 +157,7 @@ You can also compute the value of pi with the expression @code{acos
@comment math.h
@comment ISO
@deftypefunx {long double} sinl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the sine of @var{x}, where @var{x} is given in
radians. The return value is in the range @code{-1} to @code{1}.
@end deftypefun
@@ -170,6 +171,7 @@ radians. The return value is in the range @code{-1} to @code{1}.
@comment math.h
@comment ISO
@deftypefunx {long double} cosl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the cosine of @var{x}, where @var{x} is given in
radians. The return value is in the range @code{-1} to @code{1}.
@end deftypefun
@@ -183,6 +185,7 @@ radians. The return value is in the range @code{-1} to @code{1}.
@comment math.h
@comment ISO
@deftypefunx {long double} tanl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the tangent of @var{x}, where @var{x} is given in
radians.
@@ -205,6 +208,7 @@ function to do that.
@comment math.h
@comment GNU
@deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the sine of @var{x} in @code{*@var{sinx}} and the
cosine of @var{x} in @code{*@var{cos}}, where @var{x} is given in
radians. Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in
@@ -233,6 +237,9 @@ the implementation.)
@comment complex.h
@comment ISO
@deftypefunx {complex long double} csinl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c There are calls to nan* that could trigger @mtslocale if they didn't get
+@c empty strings.
These functions return the complex sine of @var{z}.
The mathematical definition of the complex sine is
@@ -253,6 +260,7 @@ $$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi})$$
@comment complex.h
@comment ISO
@deftypefunx {complex long double} ccosl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex cosine of @var{z}.
The mathematical definition of the complex cosine is
@@ -273,6 +281,7 @@ $$\cos(z) = {1\over 2} (e^{zi} + e^{-zi})$$
@comment complex.h
@comment ISO
@deftypefunx {complex long double} ctanl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex tangent of @var{z}.
The mathematical definition of the complex tangent is
@@ -307,6 +316,7 @@ respectively.
@comment math.h
@comment ISO
@deftypefunx {long double} asinl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the arc sine of @var{x}---that is, the value whose
sine is @var{x}. The value is in units of radians. Mathematically,
there are infinitely many such values; the one actually returned is the
@@ -326,6 +336,7 @@ domain, @code{asin} signals a domain error.
@comment math.h
@comment ISO
@deftypefunx {long double} acosl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the arc cosine of @var{x}---that is, the value
whose cosine is @var{x}. The value is in units of radians.
Mathematically, there are infinitely many such values; the one actually
@@ -345,6 +356,7 @@ domain, @code{acos} signals a domain error.
@comment math.h
@comment ISO
@deftypefunx {long double} atanl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the arc tangent of @var{x}---that is, the value
whose tangent is @var{x}. The value is in units of radians.
Mathematically, there are infinitely many such values; the one actually
@@ -360,6 +372,7 @@ returned is the one between @code{-pi/2} and @code{pi/2} (inclusive).
@comment math.h
@comment ISO
@deftypefunx {long double} atan2l (long double @var{y}, long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function computes the arc tangent of @var{y}/@var{x}, but the signs
of both arguments are used to determine the quadrant of the result, and
@var{x} is permitted to be zero. The return value is given in radians
@@ -388,6 +401,7 @@ If both @var{x} and @var{y} are zero, @code{atan2} returns zero.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} casinl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the complex arc sine of @var{z}---that is, the
value whose sine is @var{z}. The value returned is in radians.
@@ -404,6 +418,7 @@ values of @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} cacosl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the complex arc cosine of @var{z}---that is, the
value whose cosine is @var{z}. The value returned is in radians.
@@ -421,6 +436,7 @@ values of @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} catanl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the complex arc tangent of @var{z}---that is,
the value whose tangent is @var{z}. The value is in units of radians.
@end deftypefun
@@ -441,6 +457,7 @@ the value whose tangent is @var{z}. The value is in units of radians.
@comment math.h
@comment ISO
@deftypefunx {long double} expl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute @code{e} (the base of natural logarithms) raised
to the power @var{x}.
@@ -457,6 +474,7 @@ If the magnitude of the result is too large to be representable,
@comment math.h
@comment ISO
@deftypefunx {long double} exp2l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute @code{2} raised to the power @var{x}.
Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}.
@end deftypefun
@@ -479,6 +497,7 @@ Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}.
@comment math.h
@comment GNU
@deftypefunx {long double} pow10l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute @code{10} raised to the power @var{x}.
Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}.
@@ -496,6 +515,7 @@ preferred, since it is analogous to @code{exp} and @code{exp2}.
@comment math.h
@comment ISO
@deftypefunx {long double} logl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions compute the natural logarithm of @var{x}. @code{exp (log
(@var{x}))} equals @var{x}, exactly in mathematics and approximately in
C.
@@ -514,6 +534,7 @@ it may signal overflow.
@comment math.h
@comment ISO
@deftypefunx {long double} log10l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the base-10 logarithm of @var{x}.
@code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}.
@@ -528,6 +549,7 @@ These functions return the base-10 logarithm of @var{x}.
@comment math.h
@comment ISO
@deftypefunx {long double} log2l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the base-2 logarithm of @var{x}.
@code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}.
@end deftypefun
@@ -541,6 +563,7 @@ These functions return the base-2 logarithm of @var{x}.
@comment math.h
@comment ISO
@deftypefunx {long double} logbl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions extract the exponent of @var{x} and return it as a
floating-point value. If @code{FLT_RADIX} is two, @code{logb} is equal
to @code{floor (log2 (x))}, except it's probably faster.
@@ -560,6 +583,7 @@ negative), @code{logb} returns @math{@infinity{}}. If @var{x} is zero,
@comment math.h
@comment ISO
@deftypefunx int ilogbl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions are equivalent to the corresponding @code{logb}
functions except that they return signed integer values.
@end deftypefun
@@ -619,6 +643,7 @@ if (i == FP_ILOGB0 || i == FP_ILOGBNAN)
@comment math.h
@comment ISO
@deftypefunx {long double} powl (long double @var{base}, long double @var{power})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These are general exponentiation functions, returning @var{base} raised
to @var{power}.
@@ -638,6 +663,7 @@ underflow or overflow the destination type.
@comment math.h
@comment ISO
@deftypefunx {long double} sqrtl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the nonnegative square root of @var{x}.
If @var{x} is negative, @code{sqrt} signals a domain error.
@@ -654,6 +680,7 @@ Mathematically, it should return a complex number.
@comment math.h
@comment BSD
@deftypefunx {long double} cbrtl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the cube root of @var{x}. They cannot
fail; every representable real value has a representable real cube root.
@end deftypefun
@@ -667,6 +694,7 @@ fail; every representable real value has a representable real cube root.
@comment math.h
@comment ISO
@deftypefunx {long double} hypotl (long double @var{x}, long double @var{y})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return @code{sqrt (@var{x}*@var{x} +
@var{y}*@var{y})}. This is the length of the hypotenuse of a right
triangle with sides of length @var{x} and @var{y}, or the distance
@@ -684,6 +712,7 @@ much smaller. See also the function @code{cabs} in @ref{Absolute Value}.
@comment math.h
@comment ISO
@deftypefunx {long double} expm1l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return a value equivalent to @code{exp (@var{x}) - 1}.
They are computed in a way that is accurate even if @var{x} is
near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing
@@ -699,6 +728,7 @@ to subtraction of two numbers that are nearly equal.
@comment math.h
@comment ISO
@deftypefunx {long double} log1pl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions returns a value equivalent to @w{@code{log (1 + @var{x})}}.
They are computed in a way that is accurate even if @var{x} is
near zero.
@@ -719,6 +749,7 @@ logarithm functions.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} cexpl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return @code{e} (the base of natural
logarithms) raised to the power of @var{z}.
Mathematically, this corresponds to the value
@@ -740,6 +771,7 @@ $$\exp(z) = e^z = e^{{\rm Re}\,z} (\cos ({\rm Im}\,z) + i \sin ({\rm Im}\,z))$$
@comment complex.h
@comment ISO
@deftypefunx {complex long double} clogl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the natural logarithm of @var{z}.
Mathematically, this corresponds to the value
@@ -766,6 +798,7 @@ or is very close to 0. It is well-defined for all other values of
@comment complex.h
@comment GNU
@deftypefunx {complex long double} clog10l (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the base 10 logarithm of the complex value
@var{z}. Mathematically, this corresponds to the value
@@ -788,6 +821,7 @@ These functions are GNU extensions.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} csqrtl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex square root of the argument @var{z}. Unlike
the real-valued functions, they are defined for all values of @var{z}.
@end deftypefun
@@ -801,6 +835,7 @@ the real-valued functions, they are defined for all values of @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return @var{base} raised to the power of
@var{power}. This is equivalent to @w{@code{cexp (y * clog (x))}}
@end deftypefun
@@ -821,6 +856,7 @@ see @ref{Exponents and Logarithms}.
@comment math.h
@comment ISO
@deftypefunx {long double} sinhl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the hyperbolic sine of @var{x}, defined
mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}. They
may signal overflow if @var{x} is too large.
@@ -835,6 +871,7 @@ may signal overflow if @var{x} is too large.
@comment math.h
@comment ISO
@deftypefunx {long double} coshl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These function return the hyperbolic cosine of @var{x},
defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}.
They may signal overflow if @var{x} is too large.
@@ -849,6 +886,7 @@ They may signal overflow if @var{x} is too large.
@comment math.h
@comment ISO
@deftypefunx {long double} tanhl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the hyperbolic tangent of @var{x},
defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}.
They may signal overflow if @var{x} is too large.
@@ -868,6 +906,7 @@ complex arguments.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} csinhl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex hyperbolic sine of @var{z}, defined
mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}.
@end deftypefun
@@ -881,6 +920,7 @@ mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} ccoshl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex hyperbolic cosine of @var{z}, defined
mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}.
@end deftypefun
@@ -894,6 +934,7 @@ mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} ctanhl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the complex hyperbolic tangent of @var{z},
defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
@end deftypefun
@@ -910,6 +951,7 @@ defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
@comment math.h
@comment ISO
@deftypefunx {long double} asinhl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse hyperbolic sine of @var{x}---the
value whose hyperbolic sine is @var{x}.
@end deftypefun
@@ -923,6 +965,7 @@ value whose hyperbolic sine is @var{x}.
@comment math.h
@comment ISO
@deftypefunx {long double} acoshl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse hyperbolic cosine of @var{x}---the
value whose hyperbolic cosine is @var{x}. If @var{x} is less than
@code{1}, @code{acosh} signals a domain error.
@@ -937,6 +980,7 @@ value whose hyperbolic cosine is @var{x}. If @var{x} is less than
@comment math.h
@comment ISO
@deftypefunx {long double} atanhl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse hyperbolic tangent of @var{x}---the
value whose hyperbolic tangent is @var{x}. If the absolute value of
@var{x} is greater than @code{1}, @code{atanh} signals a domain error;
@@ -954,6 +998,7 @@ if it is equal to 1, @code{atanh} returns infinity.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} casinhl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse complex hyperbolic sine of
@var{z}---the value whose complex hyperbolic sine is @var{z}.
@end deftypefun
@@ -967,6 +1012,7 @@ These functions return the inverse complex hyperbolic sine of
@comment complex.h
@comment ISO
@deftypefunx {complex long double} cacoshl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse complex hyperbolic cosine of
@var{z}---the value whose complex hyperbolic cosine is @var{z}. Unlike
the real-valued functions, there are no restrictions on the value of @var{z}.
@@ -981,6 +1027,7 @@ the real-valued functions, there are no restrictions on the value of @var{z}.
@comment complex.h
@comment ISO
@deftypefunx {complex long double} catanhl (complex long double @var{z})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These functions return the inverse complex hyperbolic tangent of
@var{z}---the value whose complex hyperbolic tangent is @var{z}. Unlike
the real-valued functions, there are no restrictions on the value of
@@ -1005,6 +1052,7 @@ useful. Currently they only have real-valued versions.
@comment math.h
@comment SVID
@deftypefunx {long double} erfl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{erf} returns the error function of @var{x}. The error
function is defined as
@tex
@@ -1026,6 +1074,7 @@ erf (x) = 2/sqrt(pi) * integral from 0 to x of exp(-t^2) dt
@comment math.h
@comment SVID
@deftypefunx {long double} erfcl (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{erfc} returns @code{1.0 - erf(@var{x})}, but computed in a
fashion that avoids round-off error when @var{x} is large.
@end deftypefun
@@ -1039,6 +1088,7 @@ fashion that avoids round-off error when @var{x} is large.
@comment math.h
@comment SVID
@deftypefunx {long double} lgammal (long double @var{x})
+@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
@code{lgamma} returns the natural logarithm of the absolute value of
the gamma function of @var{x}. The gamma function is defined as
@tex
@@ -1077,6 +1127,7 @@ singularity.
@comment math.h
@comment XPG
@deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{lgamma_r} is just like @code{lgamma}, but it stores the sign of
the intermediate result in the variable pointed to by @var{signp}
instead of in the @var{signgam} global. This means it is reentrant.
@@ -1091,6 +1142,7 @@ instead of in the @var{signgam} global. This means it is reentrant.
@comment math.h
@comment SVID
@deftypefunx {long double} gammal (long double @var{x})
+@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
These functions exist for compatibility reasons. They are equivalent to
@code{lgamma} etc. It is better to use @code{lgamma} since for one the
name reflects better the actual computation, moreover @code{lgamma} is
@@ -1106,6 +1158,7 @@ standardized in @w{ISO C99} while @code{gamma} is not.
@comment math.h
@comment XPG, ISO
@deftypefunx {long double} tgammal (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{tgamma} applies the gamma function to @var{x}. The gamma
function is defined as
@tex
@@ -1129,6 +1182,7 @@ This function was introduced in @w{ISO C99}.
@comment math.h
@comment SVID
@deftypefunx {long double} j0l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{j0} returns the Bessel function of the first kind of order 0 of
@var{x}. It may signal underflow if @var{x} is too large.
@end deftypefun
@@ -1142,6 +1196,7 @@ This function was introduced in @w{ISO C99}.
@comment math.h
@comment SVID
@deftypefunx {long double} j1l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{j1} returns the Bessel function of the first kind of order 1 of
@var{x}. It may signal underflow if @var{x} is too large.
@end deftypefun
@@ -1155,6 +1210,7 @@ This function was introduced in @w{ISO C99}.
@comment math.h
@comment SVID
@deftypefunx {long double} jnl (int @var{n}, long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{jn} returns the Bessel function of the first kind of order
@var{n} of @var{x}. It may signal underflow if @var{x} is too large.
@end deftypefun
@@ -1168,6 +1224,7 @@ This function was introduced in @w{ISO C99}.
@comment math.h
@comment SVID
@deftypefunx {long double} y0l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{y0} returns the Bessel function of the second kind of order 0 of
@var{x}. It may signal underflow if @var{x} is too large. If @var{x}
is negative, @code{y0} signals a domain error; if it is zero,
@@ -1183,6 +1240,7 @@ is negative, @code{y0} signals a domain error; if it is zero,
@comment math.h
@comment SVID
@deftypefunx {long double} y1l (long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{y1} returns the Bessel function of the second kind of order 1 of
@var{x}. It may signal underflow if @var{x} is too large. If @var{x}
is negative, @code{y1} signals a domain error; if it is zero,
@@ -1198,6 +1256,7 @@ is negative, @code{y1} signals a domain error; if it is zero,
@comment math.h
@comment SVID
@deftypefunx {long double} ynl (int @var{n}, long double @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{yn} returns the Bessel function of the second kind of order @var{n} of
@var{x}. It may signal underflow if @var{x} is too large. If @var{x}
is negative, @code{yn} signals a domain error; if it is zero,
@@ -1384,6 +1443,8 @@ value the @code{rand} function can return. In @theglibc{}, it is
@comment stdlib.h
@comment ISO
@deftypefun int rand (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Just calls random.
The @code{rand} function returns the next pseudo-random number in the
series. The value ranges from @code{0} to @code{RAND_MAX}.
@end deftypefun
@@ -1391,6 +1452,8 @@ series. The value ranges from @code{0} to @code{RAND_MAX}.
@comment stdlib.h
@comment ISO
@deftypefun void srand (unsigned int @var{seed})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Alias to srandom.
This function establishes @var{seed} as the seed for a new series of
pseudo-random numbers. If you call @code{rand} before a seed has been
established with @code{srand}, it uses the value @code{1} as a default
@@ -1407,6 +1470,7 @@ designed and unsuitable for serious work.
@comment stdlib.h
@comment POSIX.1
@deftypefun int rand_r (unsigned int *@var{seed})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns a random number in the range 0 to @code{RAND_MAX}
just as @code{rand} does. However, all its state is stored in the
@var{seed} argument. This means the RNG's state can only have as many
@@ -1433,6 +1497,9 @@ The prototypes for these functions are in @file{stdlib.h}.
@comment stdlib.h
@comment BSD
@deftypefun {long int} random (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Takes a lock and calls random_r with an automatic variable and the
+@c global state, while holding a lock.
This function returns the next pseudo-random number in the sequence.
The value returned ranges from @code{0} to @code{2147483647}.
@@ -1446,6 +1513,11 @@ though.
@comment stdlib.h
@comment BSD
@deftypefun void srandom (unsigned int @var{seed})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Takes a lock and calls srandom_r with an automatic variable and a
+@c static buffer. There's no MT-safety issue because the static buffer
+@c is internally protected by a lock, although other threads may modify
+@c the set state before it is used.
The @code{srandom} function sets the state of the random number
generator based on the integer @var{seed}. If you supply a @var{seed} value
of @code{1}, this will cause @code{random} to reproduce the default set
@@ -1458,6 +1530,7 @@ program runs, do @code{srandom (time (0))}.
@comment stdlib.h
@comment BSD
@deftypefun {char *} initstate (unsigned int @var{seed}, char *@var{state}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
The @code{initstate} function is used to initialize the random number
generator state. The argument @var{state} is an array of @var{size}
bytes, used to hold the state information. It is initialized based on
@@ -1472,6 +1545,7 @@ restore that state.
@comment stdlib.h
@comment BSD
@deftypefun {char *} setstate (char *@var{state})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
The @code{setstate} function restores the random number state
information @var{state}. The argument must have been the result of
a previous call to @var{initstate} or @var{setstate}.
@@ -1512,6 +1586,7 @@ functions.
@comment stdlib.h
@comment GNU
@deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{random_r} function behaves exactly like the @code{random}
function except that it uses and modifies the state in the object
pointed to by the first parameter instead of the global state.
@@ -1520,6 +1595,7 @@ pointed to by the first parameter instead of the global state.
@comment stdlib.h
@comment GNU
@deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf})
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{srandom_r} function behaves exactly like the @code{srandom}
function except that it uses and modifies the state in the object
pointed to by the second parameter instead of the global state.
@@ -1528,6 +1604,7 @@ pointed to by the second parameter instead of the global state.
@comment stdlib.h
@comment GNU
@deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf})
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{initstate_r} function behaves exactly like the @code{initstate}
function except that it uses and modifies the state in the object
pointed to by the fourth parameter instead of the global state.
@@ -1536,6 +1613,7 @@ pointed to by the fourth parameter instead of the global state.
@comment stdlib.h
@comment GNU
@deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf})
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{setstate_r} function behaves exactly like the @code{setstate}
function except that it uses and modifies the state in the object
pointed to by the first parameter instead of the global state.
@@ -1582,6 +1660,12 @@ The prototypes for these functions are in @file{stdlib.h}.
@comment stdlib.h
@comment SVID
@deftypefun double drand48 (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+@c Uses of the static state buffer are not guarded by a lock (thus
+@c @mtasurace:drand48), so they may be found or left at a
+@c partially-updated state in case of calls from within signal handlers
+@c or cancellation. None of this will break safety rules or invoke
+@c undefined behavior, but it may affect randomness.
This function returns a @code{double} value in the range of @code{0.0}
to @code{1.0} (exclusive). The random bits are determined by the global
state of the random number generator in the C library.
@@ -1595,6 +1679,9 @@ bits and they are initialized to @code{0}.
@comment stdlib.h
@comment SVID
@deftypefun double erand48 (unsigned short int @var{xsubi}[3])
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+@c The static buffer is just initialized with default parameters, which
+@c are later read to advance the state held in xsubi.
This function returns a @code{double} value in the range of @code{0.0}
to @code{1.0} (exclusive), similarly to @code{drand48}. The argument is
an array describing the state of the random number generator.
@@ -1607,6 +1694,7 @@ initial use to obtain reproducible results.
@comment stdlib.h
@comment SVID
@deftypefun {long int} lrand48 (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{lrand48} function returns an integer value in the range of
@code{0} to @code{2^31} (exclusive). Even if the size of the @code{long
int} type can take more than 32 bits, no higher numbers are returned.
@@ -1617,6 +1705,7 @@ generator in the C library.
@comment stdlib.h
@comment SVID
@deftypefun {long int} nrand48 (unsigned short int @var{xsubi}[3])
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
This function is similar to the @code{lrand48} function in that it
returns a number in the range of @code{0} to @code{2^31} (exclusive) but
the state of the random number generator used to produce the random bits
@@ -1631,6 +1720,7 @@ first call to obtain reproducible results.
@comment stdlib.h
@comment SVID
@deftypefun {long int} mrand48 (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{mrand48} function is similar to @code{lrand48}. The only
difference is that the numbers returned are in the range @code{-2^31} to
@code{2^31} (exclusive).
@@ -1639,6 +1729,7 @@ difference is that the numbers returned are in the range @code{-2^31} to
@comment stdlib.h
@comment SVID
@deftypefun {long int} jrand48 (unsigned short int @var{xsubi}[3])
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{jrand48} function is similar to @code{nrand48}. The only
difference is that the numbers returned are in the range @code{-2^31} to
@code{2^31} (exclusive). For the @code{xsubi} parameter the same
@@ -1652,6 +1743,7 @@ information provided.
@comment stdlib.h
@comment SVID
@deftypefun void srand48 (long int @var{seedval})
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{srand48} function sets the most significant 32 bits of the
internal state of the random number generator to the least
significant 32 bits of the @var{seedval} parameter. The lower 16 bits
@@ -1671,6 +1763,7 @@ the user has called the @code{lcong48} function (see below).
@comment stdlib.h
@comment SVID
@deftypefun {unsigned short int *} seed48 (unsigned short int @var{seed16v}[3])
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{seed48} function initializes all 48 bits of the state of the
internal random number generator from the contents of the parameter
@var{seed16v}. Here the lower 16 bits of the first element of
@@ -1698,6 +1791,7 @@ change the parameters in the congruential formula.
@comment stdlib.h
@comment SVID
@deftypefun void lcong48 (unsigned short int @var{param}[7])
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
The @code{lcong48} function allows the user to change the complete state
of the random number generator. Unlike @code{srand48} and
@code{seed48}, this function also changes the constants in the
@@ -1730,6 +1824,7 @@ This type should be regarded as opaque and not manipulated directly.
@comment stdlib.h
@comment GNU
@deftypefun int drand48_r (struct drand48_data *@var{buffer}, double *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
This function is equivalent to the @code{drand48} function with the
difference that it does not modify the global random number generator
parameters but instead the parameters in the buffer supplied through the
@@ -1747,6 +1842,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int erand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, double *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{erand48_r} function works like @code{erand48}, but in addition
it takes an argument @var{buffer} which describes the random number
generator. The state of the random number generator is taken from the
@@ -1763,6 +1859,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
This function is similar to @code{lrand48}, but in addition it takes a
pointer to a buffer describing the state of the random number generator
just like @code{drand48}.
@@ -1777,6 +1874,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int nrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{nrand48_r} function works like @code{nrand48} in that it
produces a random number in the range @code{0} to @code{2^31}. But instead
of using the global parameters for the congruential formula it uses the
@@ -1793,6 +1891,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
This function is similar to @code{mrand48} but like the other reentrant
functions it uses the random number generator described by the value in
the buffer pointed to by @var{buffer}.
@@ -1807,6 +1906,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int jrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
The @code{jrand48_r} function is similar to @code{jrand48}. Like the
other reentrant functions of this function family it uses the
congruential formula parameters from the buffer pointed to by
@@ -1841,6 +1941,7 @@ what you expect.
@comment stdlib.h
@comment GNU
@deftypefun int srand48_r (long int @var{seedval}, struct drand48_data *@var{buffer})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
The description of the random number generator represented by the
information in @var{buffer} is initialized similarly to what the function
@code{srand48} does. The state is initialized from the parameter
@@ -1856,6 +1957,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int seed48_r (unsigned short int @var{seed16v}[3], struct drand48_data *@var{buffer})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
This function is similar to @code{srand48_r} but like @code{seed48} it
initializes all 48 bits of the state from the parameter @var{seed16v}.
@@ -1872,6 +1974,7 @@ programs.
@comment stdlib.h
@comment GNU
@deftypefun int lcong48_r (unsigned short int @var{param}[7], struct drand48_data *@var{buffer})
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
This function initializes all aspects of the random number generator
described in @var{buffer} with the data in @var{param}. Here it is
especially true that the function does more than just copying the
diff --git a/libc/manual/memory.texi b/libc/manual/memory.texi
index 55a6a50ae..4beb322c9 100644
--- a/libc/manual/memory.texi
+++ b/libc/manual/memory.texi
@@ -302,6 +302,245 @@ this function is in @file{stdlib.h}.
@comment malloc.h stdlib.h
@comment ISO
@deftypefun {void *} malloc (size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Malloc hooks and __morecore pointers, as well as such parameters as
+@c max_n_mmaps and max_mmapped_mem, are accessed without guards, so they
+@c could pose a thread safety issue; in order to not declare malloc
+@c MT-unsafe, it's modifying the hooks and parameters while multiple
+@c threads are active that is regarded as unsafe. An arena's next field
+@c is initialized and never changed again, except for main_arena's,
+@c that's protected by list_lock; next_free is only modified while
+@c list_lock is held too. All other data members of an arena, as well
+@c as the metadata of the memory areas assigned to it, are only modified
+@c while holding the arena's mutex (fastbin pointers use catomic ops
+@c because they may be modified by free without taking the arena's
+@c lock). Some reassurance was needed for fastbins, for it wasn't clear
+@c how they were initialized. It turns out they are always
+@c zero-initialized: main_arena's, for being static data, and other
+@c arena's, for being just-mmapped memory.
+
+@c Leaking file descriptors and memory in case of cancellation is
+@c unavoidable without disabling cancellation, but the lock situation is
+@c a bit more complicated: we don't have fallback arenas for malloc to
+@c be safe to call from within signal handlers. Error-checking mutexes
+@c or trylock could enable us to try and use alternate arenas, even with
+@c -DPER_THREAD (enabled by default), but supporting interruption
+@c (cancellation or signal handling) while holding the arena list mutex
+@c would require more work; maybe blocking signals and disabling async
+@c cancellation while manipulating the arena lists?
+
+@c __libc_malloc @asulock @aculock @acsfd @acsmem
+@c force_reg ok
+@c *malloc_hook unguarded
+@c arena_lookup ok
+@c tsd_getspecific ok, TLS
+@c arena_lock @asulock @aculock @acsfd @acsmem
+@c mutex_lock @asulock @aculock
+@c arena_get2 @asulock @aculock @acsfd @acsmem
+@c get_free_list @asulock @aculock
+@c mutex_lock (list_lock) dup @asulock @aculock
+@c mutex_unlock (list_lock) dup @aculock
+@c mutex_lock (arena lock) dup @asulock @aculock [returns locked]
+@c tsd_setspecific ok, TLS
+@c __get_nprocs ext ok @acsfd
+@c NARENAS_FROM_NCORES ok
+@c catomic_compare_and_exchange_bool_acq ok
+@c _int_new_arena ok @asulock @aculock @acsmem
+@c new_heap ok @acsmem
+@c mmap ok @acsmem
+@c munmap ok @acsmem
+@c mprotect ok
+@c chunk2mem ok
+@c set_head ok
+@c tsd_setspecific dup ok
+@c mutex_init ok
+@c mutex_lock (just-created mutex) ok, returns locked
+@c mutex_lock (list_lock) dup @asulock @aculock
+@c atomic_write_barrier ok
+@c mutex_unlock (list_lock) @aculock
+@c catomic_decrement ok
+@c reused_arena @asulock @aculock
+@c reads&writes next_to_use and iterates over arena next without guards
+@c those are harmless as long as we don't drop arenas from the
+@c NEXT list, and we never do; when a thread terminates,
+@c arena_thread_freeres prepends the arena to the free_list
+@c NEXT_FREE list, but NEXT is never modified, so it's safe!
+@c mutex_trylock (arena lock) @asulock @aculock
+@c mutex_lock (arena lock) dup @asulock @aculock
+@c tsd_setspecific dup ok
+@c _int_malloc @acsfd @acsmem
+@c checked_request2size ok
+@c REQUEST_OUT_OF_RANGE ok
+@c request2size ok
+@c get_max_fast ok
+@c fastbin_index ok
+@c fastbin ok
+@c catomic_compare_and_exhange_val_acq ok
+@c malloc_printerr dup @mtsenv
+@c if we get to it, we're toast already, undefined behavior must have
+@c been invoked before
+@c libc_message @mtsenv [no leaks with cancellation disabled]
+@c FATAL_PREPARE ok
+@c pthread_setcancelstate disable ok
+@c libc_secure_getenv @mtsenv
+@c getenv @mtsenv
+@c open_not_cancel_2 dup @acsfd
+@c strchrnul ok
+@c WRITEV_FOR_FATAL ok
+@c writev ok
+@c mmap ok @acsmem
+@c munmap ok @acsmem
+@c BEFORE_ABORT @acsfd
+@c backtrace ok
+@c write_not_cancel dup ok
+@c backtrace_symbols_fd @aculock
+@c open_not_cancel_2 dup @acsfd
+@c read_not_cancel dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c abort ok
+@c itoa_word ok
+@c abort ok
+@c check_remalloced_chunk ok/disabled
+@c chunk2mem dup ok
+@c alloc_perturb ok
+@c in_smallbin_range ok
+@c smallbin_index ok
+@c bin_at ok
+@c last ok
+@c malloc_consolidate ok
+@c get_max_fast dup ok
+@c clear_fastchunks ok
+@c unsorted_chunks dup ok
+@c fastbin dup ok
+@c atomic_exchange_acq ok
+@c check_inuse_chunk dup ok/disabled
+@c chunk_at_offset dup ok
+@c chunksize dup ok
+@c inuse_bit_at_offset dup ok
+@c unlink dup ok
+@c clear_inuse_bit_at_offset dup ok
+@c in_smallbin_range dup ok
+@c set_head dup ok
+@c malloc_init_state ok
+@c bin_at dup ok
+@c set_noncontiguous dup ok
+@c set_max_fast dup ok
+@c initial_top ok
+@c unsorted_chunks dup ok
+@c check_malloc_state ok/disabled
+@c set_inuse_bit_at_offset ok
+@c check_malloced_chunk ok/disabled
+@c largebin_index ok
+@c have_fastchunks ok
+@c unsorted_chunks ok
+@c bin_at ok
+@c chunksize ok
+@c chunk_at_offset ok
+@c set_head ok
+@c set_foot ok
+@c mark_bin ok
+@c idx2bit ok
+@c first ok
+@c unlink ok
+@c malloc_printerr dup ok
+@c in_smallbin_range dup ok
+@c idx2block ok
+@c idx2bit dup ok
+@c next_bin ok
+@c sysmalloc @acsfd @acsmem
+@c MMAP @acsmem
+@c set_head dup ok
+@c check_chunk ok/disabled
+@c chunk2mem dup ok
+@c chunksize dup ok
+@c chunk_at_offset dup ok
+@c heap_for_ptr ok
+@c grow_heap ok
+@c mprotect ok
+@c set_head dup ok
+@c new_heap @acsmem
+@c MMAP dup @acsmem
+@c munmap @acsmem
+@c top ok
+@c set_foot dup ok
+@c contiguous ok
+@c MORECORE ok
+@c *__morecore ok unguarded
+@c __default_morecore
+@c sbrk ok
+@c force_reg dup ok
+@c *__after_morecore_hook unguarded
+@c set_noncontiguous ok
+@c malloc_printerr dup ok
+@c _int_free (have_lock) @acsfd @acsmem [@asulock @aculock]
+@c chunksize dup ok
+@c mutex_unlock dup @aculock/!have_lock
+@c malloc_printerr dup ok
+@c check_inuse_chunk ok/disabled
+@c chunk_at_offset dup ok
+@c mutex_lock dup @asulock @aculock/@have_lock
+@c chunk2mem dup ok
+@c free_perturb ok
+@c set_fastchunks ok
+@c catomic_and ok
+@c fastbin_index dup ok
+@c fastbin dup ok
+@c catomic_compare_and_exchange_val_rel ok
+@c chunk_is_mmapped ok
+@c contiguous dup ok
+@c prev_inuse ok
+@c unlink dup ok
+@c inuse_bit_at_offset dup ok
+@c clear_inuse_bit_at_offset ok
+@c unsorted_chunks dup ok
+@c in_smallbin_range dup ok
+@c set_head dup ok
+@c set_foot dup ok
+@c check_free_chunk ok/disabled
+@c check_chunk dup ok/disabled
+@c have_fastchunks dup ok
+@c malloc_consolidate dup ok
+@c systrim ok
+@c MORECORE dup ok
+@c *__after_morecore_hook dup unguarded
+@c set_head dup ok
+@c check_malloc_state ok/disabled
+@c top dup ok
+@c heap_for_ptr dup ok
+@c heap_trim @acsfd @acsmem
+@c top dup ok
+@c chunk_at_offset dup ok
+@c prev_chunk ok
+@c chunksize dup ok
+@c prev_inuse dup ok
+@c delete_heap @acsmem
+@c munmap dup @acsmem
+@c unlink dup ok
+@c set_head dup ok
+@c shrink_heap @acsfd
+@c check_may_shrink_heap @acsfd
+@c open_not_cancel_2 @acsfd
+@c read_not_cancel ok
+@c close_not_cancel_no_status @acsfd
+@c MMAP dup ok
+@c madvise ok
+@c munmap_chunk @acsmem
+@c chunksize dup ok
+@c chunk_is_mmapped dup ok
+@c chunk2mem dup ok
+@c malloc_printerr dup ok
+@c munmap dup @acsmem
+@c check_malloc_state ok/disabled
+@c arena_get_retry @asulock @aculock @acsfd @acsmem
+@c mutex_unlock dup @aculock
+@c mutex_lock dup @asulock @aculock
+@c arena_get2 dup @asulock @aculock @acsfd @acsmem
+@c mutex_unlock @aculock
+@c mem2chunk ok
+@c chunk_is_mmapped ok
+@c arena_for_chunk ok
+@c chunk_non_main_arena ok
+@c heap_for_ptr ok
This function returns a pointer to a newly allocated block @var{size}
bytes long, or a null pointer if the block could not be allocated.
@end deftypefun
@@ -407,6 +646,21 @@ The prototype for this function is in @file{stdlib.h}.
@comment malloc.h stdlib.h
@comment ISO
@deftypefun void free (void *@var{ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c __libc_free @asulock @aculock @acsfd @acsmem
+@c releasing memory into fastbins modifies the arena without taking
+@c its mutex, but catomic operations ensure safety. If two (or more)
+@c threads are running malloc and have their own arenas locked when
+@c each gets a signal whose handler free()s large (non-fastbin-able)
+@c blocks from each other's arena, we deadlock; this is a more general
+@c case of @asulock.
+@c *__free_hook unguarded
+@c mem2chunk ok
+@c chunk_is_mmapped ok, chunk bits not modified after allocation
+@c chunksize ok
+@c munmap_chunk dup @acsmem
+@c arena_for_chunk dup ok
+@c _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem
The @code{free} function deallocates the block of memory pointed at
by @var{ptr}.
@end deftypefun
@@ -414,6 +668,8 @@ by @var{ptr}.
@comment stdlib.h
@comment Sun
@deftypefun void cfree (void *@var{ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c alias to free
This function does the same thing as @code{free}. It's provided for
backward compatibility with SunOS; you should use @code{free} instead.
@end deftypefun
@@ -471,6 +727,48 @@ is declared in @file{stdlib.h}.
@comment malloc.h stdlib.h
@comment ISO
@deftypefun {void *} realloc (void *@var{ptr}, size_t @var{newsize})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c It may call the implementations of malloc and free, so all of their
+@c issues arise, plus the realloc hook, also accessed without guards.
+
+@c __libc_realloc @asulock @aculock @acsfd @acsmem
+@c *__realloc_hook unguarded
+@c __libc_free dup @asulock @aculock @acsfd @acsmem
+@c __libc_malloc dup @asulock @aculock @acsfd @acsmem
+@c mem2chunk dup ok
+@c chunksize dup ok
+@c malloc_printerr dup ok
+@c checked_request2size dup ok
+@c chunk_is_mmapped dup ok
+@c mremap_chunk
+@c chunksize dup ok
+@c __mremap ok
+@c set_head dup ok
+@c MALLOC_COPY ok
+@c memcpy ok
+@c munmap_chunk dup @acsmem
+@c arena_for_chunk dup ok
+@c mutex_lock (arena mutex) dup @asulock @aculock
+@c _int_realloc @acsfd @acsmem
+@c malloc_printerr dup ok
+@c check_inuse_chunk dup ok/disabled
+@c chunk_at_offset dup ok
+@c chunksize dup ok
+@c set_head_size dup ok
+@c chunk_at_offset dup ok
+@c set_head dup ok
+@c chunk2mem dup ok
+@c inuse dup ok
+@c unlink dup ok
+@c _int_malloc dup @acsfd @acsmem
+@c mem2chunk dup ok
+@c MALLOC_COPY dup ok
+@c _int_free (have_lock) dup @acsfd @acsmem
+@c set_inuse_bit_at_offset dup ok
+@c set_head dup ok
+@c mutex_unlock (arena mutex) dup @aculock
+@c _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem
+
The @code{realloc} function changes the size of the block whose address is
@var{ptr} to be @var{newsize}.
@@ -530,6 +828,25 @@ is declared in @file{stdlib.h}.
@comment malloc.h stdlib.h
@comment ISO
@deftypefun {void *} calloc (size_t @var{count}, size_t @var{eltsize})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Same caveats as malloc.
+
+@c __libc_calloc @asulock @aculock @acsfd @acsmem
+@c *__malloc_hook dup unguarded
+@c memset dup ok
+@c arena_get @asulock @aculock @acsfd @acsmem
+@c arena_lookup dup ok
+@c arena_lock dup @asulock @aculock @acsfd @acsmem
+@c top dup ok
+@c chunksize dup ok
+@c heap_for_ptr dup ok
+@c _int_malloc dup @acsfd @acsmem
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem
+@c mutex_unlock dup @aculock
+@c mem2chunk dup ok
+@c chunk_is_mmapped dup ok
+@c MALLOC_ZERO ok
+@c memset dup ok
This function allocates a block long enough to contain a vector of
@var{count} elements, each of size @var{eltsize}. Its contents are
cleared to zero before @code{calloc} returns.
@@ -622,6 +939,8 @@ power of two than that, use @code{aligned_alloc} or @code{posix_memalign}.
@comment stdlib.h
@deftypefun {void *} aligned_alloc (size_t @var{alignment}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Alias to memalign.
The @code{aligned_alloc} function allocates a block of @var{size} bytes whose
address is a multiple of @var{alignment}. The @var{alignment} must be a
power of two and @var{size} must be a multiple of @var{alignment}.
@@ -645,6 +964,29 @@ portability to modern non-POSIX systems than @code{posix_memalign}.
@comment malloc.h
@comment BSD
@deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Same issues as malloc. The padding bytes are safely freed in
+@c _int_memalign, with the arena still locked.
+
+@c __libc_memalign @asulock @aculock @acsfd @acsmem
+@c *__memalign_hook dup unguarded
+@c __libc_malloc dup @asulock @aculock @acsfd @acsmem
+@c arena_get dup @asulock @aculock @acsfd @acsmem
+@c _int_memalign @acsfd @acsmem
+@c _int_malloc dup @acsfd @acsmem
+@c checked_request2size dup ok
+@c mem2chunk dup ok
+@c chunksize dup ok
+@c chunk_is_mmapped dup ok
+@c set_head dup ok
+@c chunk2mem dup ok
+@c set_inuse_bit_at_offset dup ok
+@c set_head_size dup ok
+@c _int_free (have_lock) dup @acsfd @acsmem
+@c chunk_at_offset dup ok
+@c check_inuse_chunk dup ok
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem
+@c mutex_unlock dup @aculock
The @code{memalign} function allocates a block of @var{size} bytes whose
address is a multiple of @var{boundary}. The @var{boundary} must be a
power of two! The function @code{memalign} works by allocating a
@@ -670,6 +1012,10 @@ The @code{memalign} function is obsolete and @code{aligned_alloc} or
@comment stdlib.h
@comment POSIX
@deftypefun int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c Calls memalign unless the requirements are not met (powerof2 macro is
+@c safe given an automatic variable as an argument) or there's a
+@c memalign hook (accessed unguarded, but safely).
The @code{posix_memalign} function is similar to the @code{memalign}
function in that it returns a buffer of @var{size} bytes aligned to a
multiple of @var{alignment}. But it adds one requirement to the
@@ -698,6 +1044,39 @@ systems that do not support @w{ISO C11}.
@comment malloc.h stdlib.h
@comment BSD
@deftypefun {void *} valloc (size_t @var{size})
+@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{} @acsfd{} @acsmem{}}}
+@c __libc_valloc @mtuinit @asuinit @asulock @aculock @acsfd @acsmem
+@c ptmalloc_init (once) @mtsenv @asulock @aculock @acsfd @acsmem
+@c _dl_addr @asucorrupt? @aculock
+@c __rtld_lock_lock_recursive (dl_load_lock) @asucorrupt? @aculock
+@c _dl_find_dso_for_object ok, iterates over dl_ns and its _ns_loaded objs
+@c the ok above assumes no partial updates on dl_ns and _ns_loaded
+@c that could confuse a _dl_addr call in a signal handler
+@c _dl_addr_inside_object ok
+@c determine_info ok
+@c __rtld_lock_unlock_recursive (dl_load_lock) @aculock
+@c thread_atfork @asulock @aculock @acsfd @acsmem
+@c __register_atfork @asulock @aculock @acsfd @acsmem
+@c lll_lock (__fork_lock) @asulock @aculock
+@c fork_handler_alloc @asulock @aculock @acsfd @acsmem
+@c calloc dup @asulock @aculock @acsfd @acsmem
+@c __linkin_atfork ok
+@c catomic_compare_and_exchange_bool_acq ok
+@c lll_unlock (__fork_lock) @aculock
+@c *_environ @mtsenv
+@c next_env_entry ok
+@c strcspn dup ok
+@c __libc_mallopt dup @mtasuconst:mallopt [setting mp_]
+@c __malloc_check_init @mtasuconst:malloc_hooks [setting hooks]
+@c *__malloc_initialize_hook unguarded, ok
+@c *__memalign_hook dup ok, unguarded
+@c arena_get dup @asulock @aculock @acsfd @acsmem
+@c _int_valloc @acsfd @acsmem
+@c malloc_consolidate dup ok
+@c _int_memalign dup @acsfd @acsmem
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem
+@c _int_memalign dup @acsfd @acsmem
+@c mutex_unlock dup @aculock
Using @code{valloc} is like using @code{memalign} and passing the page size
as the value of the second argument. It is implemented like this:
@@ -725,6 +1104,14 @@ interface, defined in @file{malloc.h}.
@pindex malloc.h
@deftypefun int mallopt (int @var{param}, int @var{value})
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}}
+@c __libc_mallopt @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock
+@c ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem
+@c mutex_lock (main_arena->mutex) @asulock @aculock
+@c malloc_consolidate dup ok
+@c set_max_fast ok
+@c mutex_unlock dup @aculock
+
When calling @code{mallopt}, the @var{param} argument specifies the
parameter to be set, and @var{value} the new value to be set. Possible
choices for @var{param}, as defined in @file{malloc.h}, are:
@@ -781,6 +1168,17 @@ declared in @file{mcheck.h}.
@comment mcheck.h
@comment GNU
@deftypefun int mcheck (void (*@var{abortfn}) (enum mcheck_status @var{status}))
+@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c The hooks must be set up before malloc is first used, which sort of
+@c implies @mtuinit/@asuinit but since the function is a no-op if malloc
+@c was already used, that doesn't pose any safety issues. The actual
+@c problem is with the hooks, designed for single-threaded
+@c fully-synchronous operation: they manage an unguarded linked list of
+@c allocated blocks, and get temporarily overwritten before calling the
+@c allocation functions recursively while holding the old hooks. There
+@c are no guards for thread safety, and inconsistent hooks may be found
+@c within signal handlers or left behind in case of cancellation.
+
Calling @code{mcheck} tells @code{malloc} to perform occasional
consistency checks. These will catch things such as writing
past the end of a block that was allocated with @code{malloc}.
@@ -823,6 +1221,18 @@ must be called before the first such function.
@end deftypefun
@deftypefun {enum mcheck_status} mprobe (void *@var{pointer})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c The linked list of headers may be modified concurrently by other
+@c threads, and it may find a partial update if called from a signal
+@c handler. It's mostly read only, so cancelling it might be safe, but
+@c it will modify global state that, if cancellation hits at just the
+@c right spot, may be left behind inconsistent. This path is only taken
+@c if checkhdr finds an inconsistency. If the inconsistency could only
+@c occur because of earlier undefined behavior, that wouldn't be an
+@c additional safety issue problem, but because of the other concurrency
+@c issues in the mcheck hooks, the apparent inconsistency could be the
+@c result of mcheck's own internal data race. So, AC-Unsafe it is.
+
The @code{mprobe} function lets you explicitly check for inconsistencies
in a particular allocated block. You must have already called
@code{mcheck} at the beginning of the program, to do its occasional
@@ -1137,6 +1547,24 @@ space's data segment).
@comment malloc.h
@comment SVID
@deftypefun {struct mallinfo} mallinfo (void)
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}}
+@c Accessing mp_.n_mmaps and mp_.max_mmapped_mem, modified with atomics
+@c but non-atomically elsewhere, may get us inconsistent results. We
+@c mark the statistics as unsafe, rather than the fast-path functions
+@c that collect the possibly inconsistent data.
+
+@c __libc_mallinfo @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock
+@c ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem
+@c mutex_lock dup @asulock @aculock
+@c int_mallinfo @mtasuconst:mallopt [mp_ access on main_arena]
+@c malloc_consolidate dup ok
+@c check_malloc_state dup ok/disabled
+@c chunksize dup ok
+@c fastbin dupo ok
+@c bin_at dup ok
+@c last dup ok
+@c mutex_unlock @aculock
+
This function returns information about the current dynamic memory usage
in a structure of type @code{struct mallinfo}.
@end deftypefun
@@ -1235,6 +1663,20 @@ penalties for the program if the debugging mode is not enabled.
@comment mcheck.h
@comment GNU
@deftypefun void mtrace (void)
+@safety{@prelim{}@mtunsafe{@mtsenv{} @mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtuinit{}}@asunsafe{@asuinit{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Like the mcheck hooks, these are not designed with thread safety in
+@c mind, because the hook pointers are temporarily modified without
+@c regard to other threads, signals or cancellation.
+
+@c mtrace @mtuinit @mtasurace:mtrace @mtsenv @asuinit @ascuheap @asucorrupt @acuinit @acucorrupt @aculock @acsfd @acsmem
+@c __libc_secure_getenv dup @mtsenv
+@c malloc dup @ascuheap @acsmem
+@c fopen dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c fcntl dup ok
+@c setvbuf dup @aculock
+@c fprintf dup (on newly-created stream) @aculock
+@c __cxa_atexit (once) dup @asulock @aculock @acsmem
+@c free dup @ascuheap @acsmem
When the @code{mtrace} function is called it looks for an environment
variable named @code{MALLOC_TRACE}. This variable is supposed to
contain a valid file name. The user must have write access. If the
@@ -1258,6 +1700,11 @@ systems. The prototype can be found in @file{mcheck.h}.
@comment mcheck.h
@comment GNU
@deftypefun void muntrace (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{} @aculock{} @acsfd{}}}
+
+@c muntrace @mtasurace:mtrace @mtslocale @asucorrupt @ascuheap @acucorrupt @acsmem @aculock @acsfd
+@c fprintf (fputs) dup @mtslocale @asucorrupt @ascuheap @acsmem @aculock @acucorrupt
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
The @code{muntrace} function can be called after @code{mtrace} was used
to enable tracing the @code{malloc} calls. If no (successful) call of
@code{mtrace} was made @code{muntrace} does nothing.
@@ -1569,6 +2016,20 @@ as an obstack, it must initialize the obstack by calling
@comment obstack.h
@comment GNU
@deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{@acsmem{}}}
+@c obstack_init @mtsrace:obstack-ptr @acsmem
+@c _obstack_begin @acsmem
+@c chunkfun = obstack_chunk_alloc (suggested malloc)
+@c freefun = obstack_chunk_free (suggested free)
+@c *chunkfun @acsmem
+@c obstack_chunk_alloc user-supplied
+@c *obstack_alloc_failed_handler user-supplied
+@c -> print_and_abort (default)
+@c
+@c print_and_abort
+@c _ dup @ascuintl
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c exit @acucorrupt?
Initialize obstack @var{obstack-ptr} for allocation of objects. This
function calls the obstack's @code{obstack_chunk_alloc} function. If
allocation of memory fails, the function pointed to by
@@ -1624,6 +2085,10 @@ The most direct way to allocate an object in an obstack is with
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_alloc @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_blank dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
This allocates an uninitialized block of @var{size} bytes in an obstack
and returns its address. Here @var{obstack-ptr} specifies which obstack
to allocate the block in; it is the address of the @code{struct obstack}
@@ -1658,6 +2123,10 @@ To allocate a block with specified contents, use the function
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_copy @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_grow dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
This allocates a block and initializes it by copying @var{size}
bytes of data starting at @var{address}. It calls
@code{obstack_alloc_failed_handler} if allocation of memory by
@@ -1667,6 +2136,10 @@ bytes of data starting at @var{address}. It calls
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_copy0 @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_grow0 dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
Like @code{obstack_copy}, but appends an extra byte containing a null
character. This extra byte is not counted in the argument @var{size}.
@end deftypefun
@@ -1699,6 +2172,10 @@ in the same obstack.
@comment obstack.h
@comment GNU
@deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
+@c obstack_free @mtsrace:obstack-ptr @acucorrupt
+@c (obstack_free) @mtsrace:obstack-ptr @acucorrupt
+@c *freefun dup user-supplied
If @var{object} is a null pointer, everything allocated in the obstack
is freed. Otherwise, @var{object} must be the address of an object
allocated in the obstack. Then @var{object} is freed, along with
@@ -1803,6 +2280,13 @@ already added to the growing object will become part of the other object.
@comment obstack.h
@comment GNU
@deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_blank @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c _obstack_newchunk @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c *chunkfun dup @acsmem
+@c *obstack_alloc_failed_handler dup user-supplied
+@c *freefun
+@c obstack_blank_fast dup @mtsrace:obstack-ptr
The most basic function for adding to a growing object is
@code{obstack_blank}, which adds space without initializing it.
@end deftypefun
@@ -1810,6 +2294,10 @@ The most basic function for adding to a growing object is
@comment obstack.h
@comment GNU
@deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c memcpy ok
To add a block of initialized space, use @code{obstack_grow}, which is
the growing-object analogue of @code{obstack_copy}. It adds @var{size}
bytes of data to the growing object, copying the contents from
@@ -1819,6 +2307,12 @@ bytes of data to the growing object, copying the contents from
@comment obstack.h
@comment GNU
@deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_grow0 @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c (no sequence point between storing NUL and incrementing next_free)
+@c (multiple changes to next_free => @acucorrupt)
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c memcpy ok
This is the growing-object analogue of @code{obstack_copy0}. It adds
@var{size} bytes copied from @var{data}, followed by an additional null
character.
@@ -1827,6 +2321,10 @@ character.
@comment obstack.h
@comment GNU
@deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_1grow @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_1grow_fast dup @mtsrace:obstack-ptr @acucorrupt @acsmem
To add one character at a time, use the function @code{obstack_1grow}.
It adds a single byte containing @var{c} to the growing object.
@end deftypefun
@@ -1834,6 +2332,10 @@ It adds a single byte containing @var{c} to the growing object.
@comment obstack.h
@comment GNU
@deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_ptr_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_ptr_grow_fast dup @mtsrace:obstack-ptr
Adding the value of a pointer one can use the function
@code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes
containing the value of @var{data}.
@@ -1842,6 +2344,10 @@ containing the value of @var{data}.
@comment obstack.h
@comment GNU
@deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_int_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c obstack_int_grow_fast dup @mtsrace:obstack-ptr
A single value of type @code{int} can be added by using the
@code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to
the growing object and initializes them with the value of @var{data}.
@@ -1850,6 +2356,8 @@ the growing object and initializes them with the value of @var{data}.
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
+@c obstack_finish @mtsrace:obstack-ptr @acucorrupt
When you are finished growing the object, use the function
@code{obstack_finish} to close it off and return its final address.
@@ -1869,6 +2377,7 @@ declared as follows:
@comment obstack.h
@comment GNU
@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
This function returns the current size of the growing object, in bytes.
Remember to call this function @emph{before} finishing the object.
After it is finished, @code{obstack_object_size} will return zero.
@@ -1912,6 +2421,7 @@ in the current chunk. It is declared as follows:
@comment obstack.h
@comment GNU
@deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
This returns the number of bytes that can be added safely to the current
growing object (or to an object about to be started) in obstack
@var{obstack} using the fast growth functions.
@@ -1923,6 +2433,9 @@ for adding data to a growing object:
@comment obstack.h
@comment GNU
@deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c obstack_1grow_fast @mtsrace:obstack-ptr @acucorrupt @acsmem
+@c (no sequence point between copying c and incrementing next_free)
The function @code{obstack_1grow_fast} adds one byte containing the
character @var{c} to the growing object in obstack @var{obstack-ptr}.
@end deftypefun
@@ -1930,6 +2443,8 @@ character @var{c} to the growing object in obstack @var{obstack-ptr}.
@comment obstack.h
@comment GNU
@deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+@c obstack_ptr_grow_fast @mtsrace:obstack-ptr
The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
bytes containing the value of @var{data} to the growing object in
obstack @var{obstack-ptr}.
@@ -1938,6 +2453,8 @@ obstack @var{obstack-ptr}.
@comment obstack.h
@comment GNU
@deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+@c obstack_int_grow_fast @mtsrace:obstack-ptr
The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
containing the value of @var{data} to the growing object in obstack
@var{obstack-ptr}.
@@ -1946,6 +2463,8 @@ containing the value of @var{data} to the growing object in obstack
@comment obstack.h
@comment GNU
@deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+@c obstack_blank_fast @mtsrace:obstack-ptr
The function @code{obstack_blank_fast} adds @var{size} bytes to the
growing object in obstack @var{obstack-ptr} without initializing them.
@end deftypefun
@@ -2004,6 +2523,7 @@ still growing it.
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
This function returns the tentative address of the beginning of the
currently growing object in @var{obstack-ptr}. If you finish the object
immediately, it will have that address. If you make it larger first, it
@@ -2017,6 +2537,7 @@ chunk).
@comment obstack.h
@comment GNU
@deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
This function returns the address of the first free byte in the current
chunk of obstack @var{obstack-ptr}. This is the end of the currently
growing object. If no object is growing, @code{obstack_next_free}
@@ -2026,6 +2547,8 @@ returns the same value as @code{obstack_base}.
@comment obstack.h
@comment GNU
@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
+@c dup
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
This function returns the size in bytes of the currently growing object.
This is equivalent to
@@ -2050,6 +2573,7 @@ this:
@comment obstack.h
@comment GNU
@deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The value is a bit mask; a bit that is 1 indicates that the corresponding
bit in the address of an object should be 0. The mask value should be one
less than a power of 2; the effect is that all object addresses are
@@ -2117,6 +2641,7 @@ not to waste too much memory in the portion of the last chunk not yet used.
@comment obstack.h
@comment GNU
@deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This returns the chunk size of the given obstack.
@end deftypefn
@@ -2236,6 +2761,7 @@ a BSD extension.
@comment stdlib.h
@comment GNU, BSD
@deftypefun {void *} alloca (size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The return value of @code{alloca} is the address of a block of @var{size}
bytes of memory, allocated in the stack frame of the calling function.
@end deftypefun
@@ -2418,6 +2944,7 @@ system calls.
@comment unistd.h
@comment BSD
@deftypefun int brk (void *@var{addr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{brk} sets the high end of the calling process' data segment to
@var{addr}.
@@ -2460,6 +2987,8 @@ exceed the process' data storage limit.
@comment unistd.h
@comment BSD
@deftypefun void *sbrk (ptrdiff_t @var{delta})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+
This function is the same as @code{brk} except that you specify the new
end of the data segment as an offset @var{delta} from the current end
and on success the return value is the address of the resulting end of
@@ -2599,6 +3128,7 @@ this requirement.
@comment sys/mman.h
@comment POSIX.1b
@deftypefun int mlock (const void *@var{addr}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{mlock} locks a range of the calling process' virtual pages.
@@ -2652,6 +3182,7 @@ wouldn't know what address to tell @code{mlock}.
@comment sys/mman.h
@comment POSIX.1b
@deftypefun int munlock (const void *@var{addr}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{munlock} unlocks a range of the calling process' virtual pages.
@@ -2664,6 +3195,7 @@ failure.
@comment sys/mman.h
@comment POSIX.1b
@deftypefun int mlockall (int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{mlockall} locks all the pages in a process' virtual memory address
space, and/or any that are added to it in the future. This includes the
@@ -2740,6 +3272,7 @@ with @code{munlockall} and @code{munlock}.
@comment sys/mman.h
@comment POSIX.1b
@deftypefun int munlockall (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{munlockall} unlocks every page in the calling process' virtual
address space and turn off @code{MCL_FUTURE} future locking mode.
diff --git a/libc/manual/message.texi b/libc/manual/message.texi
index 804da105a..3e324816c 100644
--- a/libc/manual/message.texi
+++ b/libc/manual/message.texi
@@ -86,7 +86,32 @@ are defined/declared in the @file{nl_types.h} header file.
@comment nl_types.h
@comment X/Open
@deftypefun nl_catd catopen (const char *@var{cat_name}, int @var{flag})
-The @code{catgets} function tries to locate the message data file names
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c catopen @mtsenv @ascuheap @acsmem
+@c strchr ok
+@c setlocale(,NULL) ok
+@c getenv @mtsenv
+@c strlen ok
+@c alloca ok
+@c stpcpy ok
+@c malloc @ascuheap @acsmem
+@c __open_catalog @ascuheap @acsmem
+@c strchr ok
+@c open_not_cancel_2 @acsfd
+@c strlen ok
+@c ENOUGH ok
+@c alloca ok
+@c memcpy ok
+@c fxstat64 ok
+@c __set_errno ok
+@c mmap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c read_not_cancel ok
+@c free dup @ascuheap @acsmem
+@c munmap ok
+@c close_not_cancel_no_status ok
+@c free @ascuheap @acsmem
+The @code{catopen} function tries to locate the message data file names
@var{cat_name} and loads it when found. The return value is of an
opaque type and can be used in calls to the other functions to refer to
this loaded catalog.
@@ -243,6 +268,7 @@ variables.
@deftypefun {char *} catgets (nl_catd @var{catalog_desc}, int @var{set}, int @var{message}, const char *@var{string})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{catgets} has to be used to access the massage catalog
previously opened using the @code{catopen} function. The
@var{catalog_desc} parameter must be a value previously returned by
@@ -281,6 +307,11 @@ We will see some how these problems can be relaxed a bit (@pxref{Common
Usage}).
@deftypefun int catclose (nl_catd @var{catalog_desc})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c catclose @ascuheap @acucorrupt @acsmem
+@c __set_errno ok
+@c munmap ok
+@c free @ascuheap @acsmem
The @code{catclose} function can be used to free the resources
associated with a message catalog which previously was opened by a call
to @code{catopen}. If the resources can be successfully freed the
@@ -803,12 +834,14 @@ not part of the C library they can be found in a separate library named
@comment libintl.h
@comment GNU
@deftypefun {char *} gettext (const char *@var{msgid})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Wrapper for dcgettext.
The @code{gettext} function searches the currently selected message
catalogs for a string which is equal to @var{msgid}. If there is such a
string available it is returned. Otherwise the argument string
@var{msgid} is returned.
-Please note that all though the return value is @code{char *} the
+Please note that although the return value is @code{char *} the
returned string must not be changed. This broken type results from the
history of the function and does not reflect the way the function should
be used.
@@ -850,6 +883,8 @@ information.
@comment libintl.h
@comment GNU
@deftypefun {char *} dgettext (const char *@var{domainname}, const char *@var{msgid})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Wrapper for dcgettext.
The @code{dgettext} functions acts just like the @code{gettext}
function. It only takes an additional first argument @var{domainname}
which guides the selection of the message catalogs which are searched
@@ -864,6 +899,102 @@ anachronism. The returned string must never be modified.
@comment libintl.h
@comment GNU
@deftypefun {char *} dcgettext (const char *@var{domainname}, const char *@var{msgid}, int @var{category})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c dcgettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c dcigettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c libc_rwlock_rdlock @asulock @aculock
+@c current_locale_name ok [protected from @mtslocale]
+@c tfind ok
+@c libc_rwlock_unlock ok
+@c plural_lookup ok
+@c plural_eval ok
+@c rawmemchr ok
+@c DETERMINE_SECURE ok, nothing
+@c strcmp ok
+@c strlen ok
+@c getcwd @ascuheap @acsmem @acsfd
+@c strchr ok
+@c stpcpy ok
+@c category_to_name ok
+@c guess_category_value @mtsenv
+@c getenv @mtsenv
+@c current_locale_name dup ok [protected from @mtslocale by dcigettext]
+@c strcmp ok
+@c ENABLE_SECURE ok
+@c _nl_find_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c libc_rwlock_rdlock dup @asulock @aculock
+@c _nl_make_l10nflist dup @ascuheap @acsmem
+@c libc_rwlock_unlock dup ok
+@c _nl_load_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock_recursive @aculock
+@c libc_lock_unlock_recursive @aculock
+@c open->open_not_cancel_2 @acsfd
+@c fstat ok
+@c mmap dup @acsmem
+@c close->close_not_cancel_no_status @acsfd
+@c malloc dup @ascuheap @acsmem
+@c read->read_not_cancel ok
+@c munmap dup @acsmem
+@c W dup ok
+@c strlen dup ok
+@c get_sysdep_segment_value ok
+@c memcpy dup ok
+@c hash_string dup ok
+@c free dup @ascuheap @acsmem
+@c libc_rwlock_init ok
+@c _nl_find_msg dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c libc_rwlock_fini ok
+@c EXTRACT_PLURAL_EXPRESSION @ascuheap @acsmem
+@c strstr dup ok
+@c isspace ok
+@c strtoul ok
+@c PLURAL_PARSE @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c INIT_GERMANIC_PLURAL ok, nothing
+@c the pre-C99 variant is @acucorrupt [protected from @mtuinit by dcigettext]
+@c _nl_expand_alias dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c _nl_explode_name dup @ascuheap @acsmem
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c free dup @asulock @aculock @acsfd @acsmem
+@c _nl_find_msg @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c _nl_load_domain dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
+@c strlen ok
+@c hash_string ok
+@c W ok
+@c SWAP ok
+@c bswap_32 ok
+@c strcmp ok
+@c get_output_charset @mtsenv @ascuheap @acsmem
+@c getenv dup @mtsenv
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c libc_rwlock_rdlock dup @asulock @aculock
+@c libc_rwlock_unlock dup ok
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c realloc @ascuheap @acsmem
+@c strdup @ascuheap @acsmem
+@c strstr ok
+@c strcspn ok
+@c mempcpy dup ok
+@c norm_add_slashes dup ok
+@c gconv_open @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c [protected from @mtslocale by dcigettext locale lock]
+@c free dup @ascuheap @acsmem
+@c libc_lock_lock @asulock @aculock
+@c calloc @ascuheap @acsmem
+@c gconv dup @acucorrupt [protected from @mtsrace and @asucorrupt by lock]
+@c libc_lock_unlock ok
+@c malloc @ascuheap @acsmem
+@c mempcpy ok
+@c memcpy ok
+@c strcpy ok
+@c libc_rwlock_wrlock @asulock @aculock
+@c tsearch @ascuheap @acucorrupt @acsmem [protected from @mtsrace and @asucorrupt]
+@c transcmp ok
+@c strmp dup ok
+@c free @ascuheap @acsmem
The @code{dcgettext} adds another argument to those which
@code{dgettext} takes. This argument @var{category} specifies the last
piece of information needed to localize the message catalog. I.e., the
@@ -988,6 +1119,13 @@ function.
@comment libintl.h
@comment GNU
@deftypefun {char *} textdomain (const char *@var{domainname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c textdomain @asulock @ascuheap @aculock @acsmem
+@c libc_rwlock_wrlock @asulock @aculock
+@c strcmp ok
+@c strdup @ascuheap @acsmem
+@c free @ascuheap @acsmem
+@c libc_rwlock_unlock ok
The @code{textdomain} function sets the default domain, which is used in
all future @code{gettext} calls, to @var{domainname}. Please note that
@code{dgettext} and @code{dcgettext} calls are not influenced if the
@@ -1019,6 +1157,14 @@ really never should be used.
@comment libintl.h
@comment GNU
@deftypefun {char *} bindtextdomain (const char *@var{domainname}, const char *@var{dirname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c bindtextdomain @ascuheap @acsmem
+@c set_binding_values @ascuheap @acsmem
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c strcmp dup ok
+@c strdup dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
The @code{bindtextdomain} function can be used to specify the directory
which contains the message catalogs for domain @var{domainname} for the
different languages. To be correct, this is the directory where the
@@ -1134,6 +1280,8 @@ purpose.
@comment libintl.h
@comment GNU
@deftypefun {char *} ngettext (const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Wrapper for dcngettext.
The @code{ngettext} function is similar to the @code{gettext} function
as it finds the message catalogs in the same way. But it takes two
extra arguments. The @var{msgid1} parameter must contain the singular
@@ -1157,6 +1305,8 @@ Please note that the numeric value @var{n} has to be passed to the
@comment libintl.h
@comment GNU
@deftypefun {char *} dngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Wrapper for dcngettext.
The @code{dngettext} is similar to the @code{dgettext} function in the
way the message catalog is selected. The difference is that it takes
two extra parameter to provide the correct plural form. These two
@@ -1166,6 +1316,8 @@ parameters are handled in the same way @code{ngettext} handles them.
@comment libintl.h
@comment GNU
@deftypefun {char *} dcngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n}, int @var{category})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Wrapper for dcigettext.
The @code{dcngettext} is similar to the @code{dcgettext} function in the
way the message catalog is selected. The difference is that it takes
two extra parameter to provide the correct plural form. These two
@@ -1422,6 +1574,9 @@ recommended that all @var{msgid}s be US-ASCII strings.
@comment libintl.h
@comment GNU
@deftypefun {char *} bind_textdomain_codeset (const char *@var{domainname}, const char *@var{codeset})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c bind_textdomain_codeset @ascuheap @acsmem
+@c set_binding_values dup @ascuheap @acsmem
The @code{bind_textdomain_codeset} function can be used to specify the
output character set for message catalogs for domain @var{domainname}.
The @var{codeset} argument must be a valid codeset name which can be used
diff --git a/libc/manual/pattern.texi b/libc/manual/pattern.texi
index afd648092..da848c340 100644
--- a/libc/manual/pattern.texi
+++ b/libc/manual/pattern.texi
@@ -28,6 +28,38 @@ declared in @file{fnmatch.h}.
@comment fnmatch.h
@comment POSIX.2
@deftypefun int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c fnmatch @mtsenv @mtslocale @ascuheap @acsmem
+@c strnlen dup ok
+@c mbsrtowcs
+@c memset dup ok
+@c malloc dup @ascuheap @acsmem
+@c mbsinit dup ok
+@c free dup @ascuheap @acsmem
+@c FCT = internal_fnwmatch @mtsenv @mtslocale @ascuheap @acsmem
+@c FOLD @mtslocale
+@c towlower @mtslocale
+@c EXT @mtsenv @mtslocale @ascuheap @acsmem
+@c STRLEN = wcslen dup ok
+@c getenv @mtsenv
+@c malloc dup @ascuheap @acsmem
+@c MEMPCPY = wmempcpy dup ok
+@c FCT dup @mtsenv @mtslocale @ascuheap @acsmem
+@c STRCAT = wcscat dup ok
+@c free dup @ascuheap @acsmem
+@c END @mtsenv
+@c getenv @mtsenv
+@c MEMCHR = wmemchr dup ok
+@c getenv @mtsenv
+@c IS_CHAR_CLASS = is_char_class @mtslocale
+@c wctype @mtslocale
+@c BTOWC ok
+@c ISWCTYPE ok
+@c auto findidx dup ok
+@c elem_hash dup ok
+@c memcmp dup ok
+@c collseq_table_lookup dup ok
+@c NO_LEADING_PERIOD ok
This function tests whether the string @var{string} matches the pattern
@var{pattern}. It returns @code{0} if they do match; otherwise, it
returns the nonzero value @code{FNM_NOMATCH}. The arguments
@@ -327,6 +359,63 @@ This is a GNU extension.
@comment glob.h
@comment POSIX.2
@deftypefun int glob (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob_t *@var{vector-ptr})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c strlen dup ok
+@c strchr dup ok
+@c malloc dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c next_brace_sub ok
+@c free dup @ascuheap @acsmem
+@c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c glob_pattern_p ok
+@c glob_pattern_type dup ok
+@c getenv dup @mtsenv
+@c GET_LOGIN_NAME_MAX ok
+@c getlogin_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c GETPW_R_SIZE_MAX ok
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c memchr dup ok
+@c *pglob->gl_stat user-supplied
+@c stat64 dup ok
+@c S_ISDIR dup ok
+@c strdup dup @ascuheap @acsmem
+@c glob_pattern_type ok
+@c glob_in_dir @mtsenv @mtslocale @asucorrupt @ascuheap @acucorrupt @acsfd @acsmem
+@c strlen dup ok
+@c glob_pattern_type dup ok
+@c malloc dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c *pglob->gl_stat user-supplied
+@c stat64 dup ok
+@c free dup @ascuheap @acsmem
+@c *pglob->gl_opendir user-supplied
+@c opendir dup @ascuheap @acsmem @acsfd
+@c dirfd dup ok
+@c *pglob->gl_readdir user-supplied
+@c CONVERT_DIRENT_DIRENT64 ok
+@c readdir64 ok [protected by exclusive use of the stream]
+@c REAL_DIR_ENTRY ok
+@c DIRENT_MIGHT_BE_DIR ok
+@c fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem
+@c DIRENT_MIGHT_BE_SYMLINK ok
+@c link_exists_p ok
+@c link_exists2_p ok
+@c strlen dup ok
+@c mempcpy dup ok
+@c *pglob->gl_stat user-supplied
+@c fxstatat64 dup ok
+@c realloc dup @ascuheap @acsmem
+@c pglob->gl_closedir user-supplied
+@c closedir @ascuheap @acsmem @acsfd
+@c prefix_array dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c strcpy dup ok
The function @code{glob} does globbing using the pattern @var{pattern}
in the current directory. It puts the result in a newly allocated
vector, and stores the size and address of this vector into
@@ -398,6 +487,8 @@ is encountered @code{glob} @emph{can} fail.
@comment glob.h
@comment GNU
@deftypefun int glob64 (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob64_t *@var{vector-ptr})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Same code as glob, but with glob64_t #defined as glob_t.
The @code{glob64} function was added as part of the Large File Summit
extensions but is not part of the original LFS proposal. The reason for
this is simple: it is not necessary. The necessity for a @code{glob64}
@@ -662,6 +753,9 @@ the time when all @code{glob} calls are done.
@comment glob.h
@comment POSIX.2
@deftypefun void globfree (glob_t *@var{pglob})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c free dup @ascuheap @acsmem
The @code{globfree} function frees all resources allocated by previous
calls to @code{glob} associated with the object pointed to by
@var{pglob}. This function should be called whenever the currently used
@@ -671,6 +765,7 @@ calls to @code{glob} associated with the object pointed to by
@comment glob.h
@comment GNU
@deftypefun void globfree64 (glob64_t *@var{pglob})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
This function is equivalent to @code{globfree} but it frees records of
type @code{glob64_t} which were allocated by @code{glob64}.
@end deftypefun
@@ -733,6 +828,250 @@ expression into it by calling @code{regcomp}.
@comment regex.h
@comment POSIX.2
@deftypefun int regcomp (regex_t *restrict @var{compiled}, const char *restrict @var{pattern}, int @var{cflags})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c All of the issues have to do with memory allocation and multi-byte
+@c character handling present in the input string, or implied by ranges
+@c or inverted character classes.
+@c (re_)malloc @ascuheap @acsmem
+@c re_compile_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c (re_)realloc @ascuheap @acsmem [no @asucorrupt @acucorrupt for we zero the buffer]
+@c init_dfa @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c (re_)malloc @ascuheap @acsmem
+@c calloc @ascuheap @acsmem
+@c _NL_CURRENT ok
+@c _NL_CURRENT_WORD ok
+@c btowc @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c libc_lock_init ok
+@c re_string_construct @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_construct_common ok
+@c re_string_realloc_buffers @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c build_wcs_upper_buffer @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c isascii ok
+@c mbsinit ok
+@c toupper ok
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c iswlower @mtslocale
+@c towupper @mtslocale
+@c wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c (re_)malloc dup @ascuheap @acsmem
+@c build_upper_buffer ok (@mtslocale but optimized)
+@c islower ok
+@c toupper ok
+@c build_wcs_buffer @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_translate_buffer ok
+@c parse @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c fetch_token @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c peek_token @mtslocale
+@c re_string_eoi ok
+@c re_string_peek_byte ok
+@c re_string_cur_idx ok
+@c re_string_length ok
+@c re_string_peek_byte_case @mtslocale
+@c re_string_peek_byte dup ok
+@c re_string_is_single_byte_char ok
+@c isascii ok
+@c re_string_peek_byte dup ok
+@c re_string_wchar_at ok
+@c re_string_skip_bytes ok
+@c re_string_skip_bytes dup ok
+@c parse_reg_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c parse_branch @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c parse_expression @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c create_token_tree dup @ascuheap @acsmem
+@c re_string_eoi dup ok
+@c re_string_first_byte ok
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c create_tree dup @ascuheap @acsmem
+@c parse_sub_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c parse_reg_exp dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c postorder() @ascuheap @acsmem
+@c free_tree @ascuheap @acsmem
+@c free_token dup @ascuheap @acsmem
+@c create_tree dup @ascuheap @acsmem
+@c parse_bracket_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c _NL_CURRENT dup ok
+@c _NL_CURRENT_WORD dup ok
+@c calloc dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c peek_token_bracket ok
+@c re_string_eoi dup ok
+@c re_string_peek_byte dup ok
+@c re_string_first_byte dup ok
+@c re_string_cur_idx dup ok
+@c re_string_length dup ok
+@c re_string_skip_bytes dup ok
+@c bitset_set ok
+@c re_string_skip_bytes ok
+@c parse_bracket_element @mtslocale
+@c re_string_char_size_at ok
+@c re_string_wchar_at dup ok
+@c re_string_skip_bytes dup ok
+@c parse_bracket_symbol @mtslocale
+@c re_string_eoi dup ok
+@c re_string_fetch_byte_case @mtslocale
+@c re_string_fetch_byte ok
+@c re_string_first_byte dup ok
+@c isascii ok
+@c re_string_char_size_at dup ok
+@c re_string_skip_bytes dup ok
+@c re_string_fetch_byte dup ok
+@c re_string_peek_byte dup ok
+@c re_string_skip_bytes dup ok
+@c peek_token_bracket dup ok
+@c auto build_range_exp @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c auto lookup_collation_sequence_value @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c btowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c collseq_table_lookup ok
+@c auto seek_collating_symbol_entry dup ok
+@c (re_)realloc dup @ascuheap @acsmem
+@c collseq_table_lookup dup ok
+@c bitset_set dup ok
+@c (re_)realloc dup @ascuheap @acsmem
+@c build_equiv_class @mtslocale @ascuheap @acsmem
+@c _NL_CURRENT ok
+@c auto findidx ok
+@c bitset_set dup ok
+@c (re_)realloc dup @ascuheap @acsmem
+@c auto build_collating_symbol @ascuheap @acsmem
+@c auto seek_collating_symbol_entry ok
+@c bitset_set dup ok
+@c (re_)realloc dup @ascuheap @acsmem
+@c build_charclass @mtslocale @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c bitset_set dup ok
+@c isalnum ok
+@c iscntrl ok
+@c isspace ok
+@c isalpha ok
+@c isdigit ok
+@c isprint ok
+@c isupper ok
+@c isblank ok
+@c isgraph ok
+@c ispunct ok
+@c isxdigit ok
+@c bitset_not ok
+@c bitset_mask ok
+@c create_token_tree dup @ascuheap @acsmem
+@c create_tree dup @ascuheap @acsmem
+@c free_charset dup @ascuheap @acsmem
+@c init_word_char @mtslocale
+@c isalnum ok
+@c build_charclass_op @mtslocale @ascuheap @acsmem
+@c calloc dup @ascuheap @acsmem
+@c build_charclass dup @mtslocale @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c free_charset dup @ascuheap @acsmem
+@c bitset_set dup ok
+@c bitset_not dup ok
+@c bitset_mask dup ok
+@c create_token_tree dup @ascuheap @acsmem
+@c create_tree dup @ascuheap @acsmem
+@c parse_dup_op @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_cur_idx dup ok
+@c fetch_number @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_set_index ok
+@c postorder() @ascuheap @acsmem
+@c free_tree dup @ascuheap @acsmem
+@c mark_opt_subexp ok
+@c duplicate_tree @ascuheap @acsmem
+@c create_token_tree dup @ascuheap @acsmem
+@c create_tree dup @ascuheap @acsmem
+@c postorder() @ascuheap @acsmem
+@c free_tree dup @ascuheap @acsmem
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c parse_branch dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c create_tree dup @ascuheap @acsmem
+@c create_tree @ascuheap @acsmem
+@c create_token_tree @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c analyze @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c preorder() @ascuheap @acsmem
+@c optimize_subexps ok
+@c calc_next ok
+@c link_nfa_nodes @ascuheap @acsmem
+@c re_node_set_init_1 @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c re_node_set_init_2 @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c postorder() @ascuheap @acsmem
+@c lower_subexps @ascuheap @acsmem
+@c lower_subexp @ascuheap @acsmem
+@c create_tree dup @ascuheap @acsmem
+@c calc_first @ascuheap @acsmem
+@c re_dfa_add_node @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c re_node_set_init_empty ok
+@c calc_eclosure @ascuheap @acsmem
+@c calc_eclosure_iter @ascuheap @acsmem
+@c re_node_set_alloc @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c duplicate_node_closure @ascuheap @acsmem
+@c re_node_set_empty ok
+@c duplicate_node @ascuheap @acsmem
+@c re_dfa_add_node dup @ascuheap @acsmem
+@c re_node_set_insert @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c search_duplicated_node ok
+@c re_node_set_merge @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c re_node_set_free @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c calc_inveclosure @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c re_node_set_insert_last @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c optimize_utf8 ok
+@c create_initial_state @ascuheap @acsmem
+@c re_node_set_init_copy @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c re_node_set_contains ok
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_acquire_state_context @ascuheap @acsmem
+@c calc_state_hash ok
+@c re_node_set_compare ok
+@c create_cd_newstate @ascuheap @acsmem
+@c calloc dup @ascuheap @acsmem
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c free_state @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c NOT_SATISFY_PREV_CONSTRAINT ok
+@c re_node_set_remove_at ok
+@c register_state @ascuheap @acsmem
+@c re_node_set_alloc dup @ascuheap @acsmem
+@c re_node_set_insert_last dup @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c free_workarea_compile @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c re_string_destruct @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c free_dfa_content @ascuheap @acsmem
+@c free_token @ascuheap @acsmem
+@c free_charset @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_compile_fastmap @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_compile_fastmap_iter @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_set_fastmap ok
+@c tolower ok
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c towlower @mtslocale
+@c _NL_CURRENT ok
+@c (re_)free @ascuheap @acsmem
The function @code{regcomp} ``compiles'' a regular expression into a
data structure that you can use with @code{regexec} to match against a
string. The compiled regular expression format is designed for
@@ -882,6 +1221,247 @@ unless the regular expression contains anchor characters (@samp{^} or
@comment regex.h
@comment POSIX.2
@deftypefun int regexec (const regex_t *restrict @var{compiled}, const char *restrict @var{string}, size_t @var{nmatch}, regmatch_t @var{matchptr}[restrict], int @var{eflags})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c libc_lock_lock @asulock @aculock
+@c re_search_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_allocate @ascuheap @acsmem
+@c re_string_construct_common dup ok
+@c re_string_realloc_buffers dup @ascuheap @acsmem
+@c match_ctx_init @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c re_string_byte_at ok
+@c re_string_first_byte dup ok
+@c check_matching @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_cur_idx dup ok
+@c acquire_init_state_context dup @ascuheap @acsmem
+@c re_string_context_at ok
+@c re_string_byte_at dup ok
+@c bitset_contain ok
+@c re_acquire_state_context dup @ascuheap @acsmem
+@c check_subexp_matching_top @ascuheap @acsmem
+@c match_ctx_add_subtop @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c calloc dup @ascuheap @acsmem
+@c transit_state_bkref @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_cur_idx dup ok
+@c re_string_context_at dup ok
+@c NOT_SATISFY_NEXT_CONSTRAINT ok
+@c get_subexp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_get_buffer ok
+@c search_cur_bkref_entry ok
+@c clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c extend_buffers @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_realloc_buffers dup @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c build_wcs_upper_buffer dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c build_upper_buffer dup ok (@mtslocale but optimized)
+@c build_wcs_buffer dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_translate_buffer dup ok
+@c get_subexp_sub @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c check_arrival @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c (re_)realloc dup @ascuheap @acsmem
+@c re_string_context_at dup ok
+@c re_node_set_init_1 dup @ascuheap @acsmem
+@c check_arrival_expand_ecl @ascuheap @acsmem
+@c re_node_set_alloc dup @ascuheap @acsmem
+@c find_subexp_node ok
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c check_arrival_expand_ecl_sub @ascuheap @acsmem
+@c re_node_set_contains dup ok
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c expand_bkref_cache @ascuheap @acsmem
+@c search_cur_bkref_entry dup ok
+@c re_node_set_contains dup ok
+@c re_node_set_init_1 dup @ascuheap @acsmem
+@c check_arrival_expand_ecl dup @ascuheap @acsmem
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_acquire_state @ascuheap @acsmem
+@c calc_state_hash dup ok
+@c re_node_set_compare dup ok
+@c create_ci_newstate @ascuheap @acsmem
+@c calloc dup @ascuheap @acsmem
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c register_state dup @ascuheap @acsmem
+@c free_state dup @ascuheap @acsmem
+@c re_acquire_state_context dup @ascuheap @acsmem
+@c re_node_set_merge dup @ascuheap @acsmem
+@c check_arrival_add_next_nodes @mtslocale @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c check_node_accept_bytes @mtslocale @ascuheap @acsmem
+@c re_string_byte_at dup ok
+@c re_string_char_size_at dup ok
+@c re_string_elem_size_at @mtslocale
+@c _NL_CURRENT_WORD dup ok
+@c _NL_CURRENT dup ok
+@c auto findidx dup ok
+@c _NL_CURRENT_WORD dup ok
+@c _NL_CURRENT dup ok
+@c collseq_table_lookup dup ok
+@c find_collation_sequence_value @mtslocale
+@c _NL_CURRENT_WORD dup ok
+@c _NL_CURRENT dup ok
+@c auto findidx dup ok
+@c wcscoll @mtslocale @ascuheap @acsmem
+@c re_node_set_empty dup ok
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_acquire_state dup @ascuheap @acsmem
+@c check_node_accept ok
+@c re_string_byte_at dup ok
+@c bitset_contain dup ok
+@c re_string_context_at dup ok
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok
+@c match_ctx_add_entry @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c clean_state_log_if_needed dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c find_subexp_node dup ok
+@c calloc dup @ascuheap @acsmem
+@c check_arrival dup ***
+@c match_ctx_add_sublast @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c re_acquire_state_context dup @ascuheap @acsmem
+@c re_node_set_init_union @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c re_node_set_free dup @ascuheap @acsmem
+@c check_subexp_matching_top dup @ascuheap @acsmem
+@c check_halt_state_context ok
+@c re_string_context_at dup ok
+@c check_halt_node_context ok
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok
+@c re_string_eoi dup ok
+@c extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c transit_state @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c transit_state_mb @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_context_at dup ok
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok
+@c check_node_accept_bytes dup @mtslocale @ascuheap @acsmem
+@c re_string_cur_idx dup ok
+@c clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_node_set_init_union dup @ascuheap @acsmem
+@c re_acquire_state_context dup @ascuheap @acsmem
+@c re_string_fetch_byte dup ok
+@c re_string_context_at dup ok
+@c build_trtable @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c group_nodes_into_DFAstates @ascuheap @acsmem
+@c bitset_empty dup ok
+@c bitset_set dup ok
+@c bitset_merge dup ok
+@c bitset_set_all ok
+@c bitset_clear ok
+@c bitset_contain dup ok
+@c bitset_copy ok
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_node_set_init_1 dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_alloc dup @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c bitset_empty ok
+@c re_node_set_empty dup ok
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_acquire_state_context dup @ascuheap @acsmem
+@c bitset_merge ok
+@c calloc dup @ascuheap @acsmem
+@c bitset_contain dup ok
+@c merge_state_with_log @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c re_string_cur_idx dup ok
+@c re_node_set_init_union dup @ascuheap @acsmem
+@c re_string_context_at dup ok
+@c re_node_set_free dup @ascuheap @acsmem
+@c check_subexp_matching_top @ascuheap @acsmem
+@c match_ctx_add_subtop dup @ascuheap @acsmem
+@c transit_state_bkref dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c find_recover_state
+@c re_string_cur_idx dup ok
+@c re_string_skip_bytes dup ok
+@c merge_state_with_log dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c check_halt_state_context dup ok
+@c prune_impossible_nodes @mtslocale @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c sift_ctx_init ok
+@c re_node_set_init_empty dup ok
+@c sift_states_backward @mtslocale @ascuheap @acsmem
+@c re_node_set_init_1 dup @ascuheap @acsmem
+@c update_cur_sifted_state @mtslocale @ascuheap @acsmem
+@c add_epsilon_src_nodes @ascuheap @acsmem
+@c re_acquire_state dup @ascuheap @acsmem
+@c re_node_set_alloc dup @ascuheap @acsmem
+@c re_node_set_merge dup @ascuheap @acsmem
+@c re_node_set_add_intersect @ascuheap @acsmem
+@c (re_)realloc dup @ascuheap @acsmem
+@c check_subexp_limits @ascuheap @acsmem
+@c sub_epsilon_src_nodes @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c re_node_set_contains dup ok
+@c re_node_set_add_intersect dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_remove_at dup ok
+@c re_node_set_contains dup ok
+@c re_acquire_state dup @ascuheap @acsmem
+@c sift_states_bkref @mtslocale @ascuheap @acsmem
+@c search_cur_bkref_entry dup ok
+@c check_dst_limits ok
+@c search_cur_bkref_entry dup ok
+@c check_dst_limits_calc_pos ok
+@c check_dst_limits_calc_pos_1 ok
+@c re_node_set_init_copy dup @ascuheap @acsmem
+@c re_node_set_insert dup @ascuheap @acsmem
+@c sift_states_backward dup @mtslocale @ascuheap @acsmem
+@c merge_state_array dup @ascuheap @acsmem
+@c re_node_set_remove ok
+@c re_node_set_contains dup ok
+@c re_node_set_remove_at dup ok
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c re_node_set_empty dup ok
+@c build_sifted_states @mtslocale @ascuheap @acsmem
+@c sift_states_iter_mb @mtslocale @ascuheap @acsmem
+@c check_node_accept_bytes dup @mtslocale @ascuheap @acsmem
+@c check_node_accept dup ok
+@c check_dst_limits dup ok
+@c re_node_set_insert dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c check_halt_state_context dup ok
+@c merge_state_array @ascuheap @acsmem
+@c re_node_set_init_union dup @ascuheap @acsmem
+@c re_acquire_state dup @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c set_regs @ascuheap @acsmem
+@c (re_)malloc dup @ascuheap @acsmem
+@c re_node_set_init_empty dup ok
+@c free_fail_stack_return @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c update_regs ok
+@c re_node_set_free dup @ascuheap @acsmem
+@c pop_fail_stack @ascuheap @acsmem
+@c re_node_set_free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c match_ctx_free @ascuheap @acsmem
+@c match_ctx_clean @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c (re_)free dup @ascuheap @acsmem
+@c re_string_destruct dup @ascuheap @acsmem
+@c libc_lock_unlock @aculock
This function tries to match the compiled regular expression
@code{*@var{compiled}} against @var{string}.
@@ -1044,6 +1624,9 @@ free the storage it uses by calling @code{regfree}.
@comment regex.h
@comment POSIX.2
@deftypefun void regfree (regex_t *@var{compiled})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c (re_)free dup @ascuheap @acsmem
+@c free_dfa_content dup @ascuheap @acsmem
Calling @code{regfree} frees all the storage that @code{*@var{compiled}}
points to. This includes various internal fields of the @code{regex_t}
structure that aren't documented in this manual.
@@ -1061,6 +1644,8 @@ the function @code{regerror} to turn it into an error message string.
@comment regex.h
@comment POSIX.2
@deftypefun size_t regerror (int @var{errcode}, const regex_t *restrict @var{compiled}, char *restrict @var{buffer}, size_t @var{length})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c regerror calls gettext, strcmp and mempcpy or memcpy.
This function produces an error message string for the error code
@var{errcode}, and stores the string in @var{length} bytes of memory
starting at @var{buffer}. For the @var{compiled} argument, supply the
@@ -1226,6 +1811,145 @@ the beginning of the vector.
@comment wordexp.h
@comment POSIX.2
@deftypefun int wordexp (const char *@var{words}, wordexp_t *@var{word-vector-ptr}, int @var{flags})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtasuconst{:@mtsenv{}} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuintl{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c wordexp @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
+@c w_newword ok
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c calloc dup @ascuheap @acsmem
+@c getenv dup @mtsenv
+@c strcpy dup ok
+@c parse_backslash @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c parse_dollars @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c parse_arith @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c w_newword dup ok
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c parse_qtd_backslash dup @ascuheap @acsmem
+@c eval_expr @mtslocale
+@c eval_expr_multidiv @mtslocale
+@c eval_expr_val @mtslocale
+@c isspace dup @mtslocale
+@c eval_expr dup @mtslocale
+@c isspace dup @mtslocale
+@c isspace dup @mtslocale
+@c free dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c w_addstr dup @ascuheap @acsmem
+@c itoa_word dup ok
+@c parse_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c w_newword dup ok
+@c pthread_setcancelstate @ascuplugin @ascuheap @acsmem
+@c (disable cancellation around exec_comm; it may do_cancel the
+@c second time, if async cancel is enabled)
+@c THREAD_ATOMIC_CMPXCHG_VAL dup ok
+@c CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok
+@c do_cancel @ascuplugin @ascuheap @acsmem
+@c THREAD_ATOMIC_BIT_SET dup ok
+@c pthread_unwind @ascuplugin @ascuheap @acsmem
+@c Unwind_ForcedUnwind if available @ascuplugin @ascuheap @acsmem
+@c libc_unwind_longjmp otherwise
+@c cleanups
+@c exec_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c pipe2 dup ok
+@c pipe dup ok
+@c fork dup @ascuplugin @aculock
+@c close dup @acsfd
+@c on child: exec_comm_child -> exec or abort
+@c waitpid dup ok
+@c read dup ok
+@c w_addmem dup @ascuheap @acsmem
+@c strchr dup ok
+@c w_addword dup @ascuheap @acsmem
+@c w_newword dup ok
+@c w_addchar dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c kill dup ok
+@c free dup @ascuheap @acsmem
+@c parse_param @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c reads from __libc_argc and __libc_argv without guards
+@c w_newword dup ok
+@c isalpha dup @mtslocale^^
+@c w_addchar dup @ascuheap @acsmem
+@c isalnum dup @mtslocale^^
+@c isdigit dup @mtslocale^^
+@c strchr dup ok
+@c itoa_word dup ok
+@c atoi dup @mtslocale
+@c getpid dup ok
+@c w_addstr dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c stpcpy dup ok
+@c w_addword dup @ascuheap @acsmem
+@c strdup dup @ascuheap @acsmem
+@c getenv dup @mtsenv
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_tilde dup @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem
+@c mempcpy dup ok
+@c _ dup @ascuintl
+@c fxprintf dup @aculock
+@c setenv dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c strspn dup ok
+@c strcspn dup ok
+@c parse_backtick @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c w_newword dup ok
+@c exec_comm dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c free dup @ascuheap @acsmem
+@c parse_qtd_backslash dup @ascuheap @acsmem
+@c parse_backslash dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c parse_dquote @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
+@c parse_qtd_backslash dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c w_addword dup @ascuheap @acsmem
+@c strdup dup @ascuheap @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c parse_squote dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c parse_tilde @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c strchr dup ok
+@c w_addchar dup @ascuheap @acsmem
+@c getenv dup @mtsenv
+@c w_addstr dup @ascuheap @acsmem
+@c strlen dup ok
+@c w_addmem dup @ascuheap @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c getuid dup ok
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_glob @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c strchr dup ok
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c parse_qtd_backslash @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c parse_backslash dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c w_addword dup @ascuheap @acsmem
+@c w_newword dup ok
+@c do_parse_glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem
+@c glob dup @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem [auto glob_t avoids @asucorrupt @acucorrupt]
+@c w_addstr dup @ascuheap @acsmem
+@c w_addchar dup @ascuheap @acsmem
+@c globfree dup @ascuheap @acsmem [auto glob_t avoids @asucorrupt @acucorrupt]
+@c free dup @ascuheap @acsmem
+@c w_newword dup ok
+@c strdup dup @ascuheap @acsmem
+@c w_addword dup @ascuheap @acsmem
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c strchr dup ok
+@c w_addchar dup @ascuheap @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
Perform word expansion on the string @var{words}, putting the result in
a newly allocated vector, and store the size and address of this vector
into @code{*@var{word-vector-ptr}}. The argument @var{flags} is a
@@ -1289,6 +2013,9 @@ quoting character is a syntax error.
@comment wordexp.h
@comment POSIX.2
@deftypefun void wordfree (wordexp_t *@var{word-vector-ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c free dup @ascuheap @acsmem
Free the storage used for the word-strings and vector that
@code{*@var{word-vector-ptr}} points to. This does not free the
structure @code{*@var{word-vector-ptr}} itself---only the other
diff --git a/libc/manual/pipe.texi b/libc/manual/pipe.texi
index 21a8a3497..2d7e30e79 100644
--- a/libc/manual/pipe.texi
+++ b/libc/manual/pipe.texi
@@ -56,6 +56,8 @@ The @code{pipe} function is declared in the header file
@comment unistd.h
@comment POSIX.1
@deftypefun int pipe (int @var{filedes}@t{[2]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+@c On Linux, syscall pipe2. On HURD, call socketpair.
The @code{pipe} function creates a pipe and puts the file descriptors
for the reading and writing ends of the pipe (respectively) into
@code{@var{filedes}[0]} and @code{@var{filedes}[1]}.
@@ -108,6 +110,41 @@ much flexibility as using the low-level functions directly.
@comment stdio.h
@comment POSIX.2, SVID, BSD
@deftypefun {FILE *} popen (const char *@var{command}, const char *@var{mode})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c popen @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c _IO_init ok
+@c _IO_no_init ok
+@c _IO_old_init ok
+@c _IO_lock_init ok
+@c _IO_new_file_init @asucorrupt @acucorrupt @aculock @acsfd
+@c _IO_link_in @asucorrupt @acucorrupt @aculock @acsfd
+@c the linked list is guarded by a recursive lock;
+@c it may get corrupted with async signals and cancellation
+@c _IO_lock_lock dup @aculock
+@c _IO_flockfile dup @aculock
+@c _IO_funlockfile dup @aculock
+@c _IO_lock_unlock dup @aculock
+@c _IO_new_proc_open @asucorrupt @acucorrupt @aculock @acsfd
+@c the linked list is guarded by a recursive lock;
+ @c it may get corrupted with async signals and cancellation
+@c _IO_file_is_open ok
+@c pipe2 dup @acsfd
+@c pipe dup @acsfd
+@c _IO_fork=fork @aculock
+@c _IO_close=close_not_cancel dup @acsfd
+@c fcntl dup ok
+@c _IO_lock_lock @aculock
+@c _IO_lock_unlock @aculock
+@c _IO_mask_flags ok [no @mtasurace:stream, nearly but sufficiently exclusive access]
+@c _IO_un_link @asucorrupt @acucorrupt @aculock @acsfd
+@c the linked list is guarded by a recursive lock;
+@c it may get corrupted with async signals and cancellation
+@c _IO_lock_lock dup @aculock
+@c _IO_flockfile dup @aculock
+@c _IO_funlockfile dup @aculock
+@c _IO_lock_unlock dup @aculock
+@c free dup @ascuheap @acsmem
The @code{popen} function is closely related to the @code{system}
function; see @ref{Running a Command}. It executes the shell command
@var{command} as a subprocess. However, instead of waiting for the
@@ -131,6 +168,77 @@ cannot be forked, or if the program cannot be executed.
@comment stdio.h
@comment POSIX.2, SVID, BSD
@deftypefun int pclose (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuplugin{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c Although the stream cannot be used after the call, even in case of
+@c async cancellation, because the stream must not be used after pclose
+@c is called, other stdio linked lists and their locks may be left in
+@c corrupt states; that's where the corrupt and lock annotations come
+@c from.
+@c
+@c pclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
+@c _IO_new_fclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
+@c _IO_acquire_lock dup @aculock
+@c _IO_flockfile dup @aculock
+@c _IO_file_close_it @ascuheap @ascuplugin @asucorrupt @aculock @acucorrupt @acsfd @acsmem
+@c _IO_file_is_open dup ok
+@c _IO_do_flush @asucorrupt @ascuplugin @acucorrupt
+@c _IO_do_write @asucorrupt @acucorrupt
+@c new_do_write @asucorrupt @acucorrupt
+@c _IO_SYSSEEK ok
+@c lseek64 dup ok
+@c _IO_SYSWRITE ok
+@c write_not_cancel dup ok
+@c write dup ok
+@c _IO_adjust_column ok
+@c _IO_setg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_wdo_write @asucorrupt @ascuplugin @acucorrupt
+@c _IO_new_do_write=_IO_do_write dup @asucorrupt @acucorrupt
+@c *cc->__codecvt_do_out @ascuplugin
+@c _IO_wsetg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_unsave_markers @ascuheap @asucorrupt @acucorrupt @acsmem
+@c _IO_have_backup dup ok
+@c _IO_free_backup_area dup @ascuheap @asucorrupt @acucorrupt @acsmem
+@c _IO_SYSCLOSE @aculock @acucorrupt @acsfd
+@c _IO_lock_lock dup @aculock
+@c _IO_close=close_not_cancel dup @acsfd
+@c _IO_lock_unlock dup @aculock
+@c _IO_waitpid=waitpid_not_cancel dup ok
+@c _IO_have_wbackup ok
+@c _IO_free_wbackup_area @ascuheap @asucorrupt @acucorrupt @acsmem
+@c _IO_in_backup dup ok
+@c _IO_switch_to_main_wget_area @asucorrupt @acucorrupt
+@c free dup @ascuheap @acsmem
+@c _IO_wsetb @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_wsetg @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_wsetp @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_setb @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_setg @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_setp @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
+@c _IO_release_lock dup @aculock
+@c _IO_funlockfile dup @aculock
+@c _IO_FINISH @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem
+@c _IO_new_file_finish @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem
+@c _IO_file_is_open dup ok
+@c _IO_do_flush dup @ascuplugin @asucorrupt @acucorrupt
+@c _IO_SYSCLOSE dup @aculock @acucorrupt @acsfd
+@c _IO_default_finish @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem
+@c FREE_BUF @acsmem
+@c munmap dup @acsmem
+@c free dup @ascuheap @acsmem
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
+@c _IO_lock_fini ok
+@c libc_lock_fini_recursive ok
+@c libc_lock_lock dup @asulock @aculock
+@c gconv_release_step ok
+@c libc_lock_unlock dup @asulock @aculock
+@c _IO_have_backup ok
+@c _IO_free_backup_area @ascuheap @asucorrupt @acucorrupt @acsmem
+@c _IO_in_backup ok
+@c _IO_switch_to_main_get_area @asucorrupt @acucorrupt
+@c free dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
The @code{pclose} function is used to close a stream created by @code{popen}.
It waits for the child process to terminate and returns its status value,
as for the @code{system} function.
@@ -168,6 +276,8 @@ The @code{mkfifo} function is declared in the header file
@comment sys/stat.h
@comment POSIX.1
@deftypefun int mkfifo (const char *@var{filename}, mode_t @var{mode})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On generic Posix, calls xmknod.
The @code{mkfifo} function makes a FIFO special file with name
@var{filename}. The @var{mode} argument is used to set the file's
permissions; see @ref{Setting Permissions}.
diff --git a/libc/manual/platform.texi b/libc/manual/platform.texi
index 99f46755a..872e32ecb 100644
--- a/libc/manual/platform.texi
+++ b/libc/manual/platform.texi
@@ -15,6 +15,7 @@ Facilities specific to PowerPC that are not specific to a particular
operating system are declared in @file{sys/platform/ppc.h}.
@deftypefun {uint64_t} __ppc_get_timebase (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Read the current value of the Time Base Register.
The @dfn{Time Base Register} is a 64-bit register that stores a monotonically
@@ -28,6 +29,17 @@ efficient.
@end deftypefun
@deftypefun {uint64_t} __ppc_get_timebase_freq (void)
+@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}}
+@c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd
+@c __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd
+@c the initialization of the static timebase_freq is not exactly
+@c safe, because hp_timing_t cannot be atomically set up.
+@c syscall:get_tbfreq ok
+@c open dup @acsfd
+@c read dup ok
+@c memcpy dup ok
+@c memmem dup ok
+@c close dup @acsfd
Read the current frequency at which the Time Base Register is updated.
This frequency is not related to the processor clock or the bus clock.
@@ -42,17 +54,20 @@ processors. More information is available in @cite{Power ISA 2.06b - Book II -
Section 3.2}.
@deftypefun {void} __ppc_yield (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Provide a hint that performance will probably be improved if shared resources
dedicated to the executing processor are released for use by other processors.
@end deftypefun
@deftypefun {void} __ppc_mdoio (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Provide a hint that performance will probably be improved if shared resources
dedicated to the executing processor are released until all outstanding storage
accesses to caching-inhibited storage have been completed.
@end deftypefun
@deftypefun {void} __ppc_mdoom (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Provide a hint that performance will probably be improved if shared resources
dedicated to the executing processor are released until all outstanding storage
accesses to cacheable storage for which the data is not in the cache have been
@@ -60,6 +75,7 @@ completed.
@end deftypefun
@deftypefun {void} __ppc_set_ppr_med (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to medium value (default).
The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls
@@ -73,9 +89,11 @@ available in @cite{Power ISA 2.06b - Book II - Section 3.1}.
@end deftypefun
@deftypefun {void} __ppc_set_ppr_low (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to low value.
@end deftypefun
@deftypefun {void} __ppc_set_ppr_med_low (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to medium low value.
@end deftypefun
diff --git a/libc/manual/process.texi b/libc/manual/process.texi
index e96294150..aee65b973 100644
--- a/libc/manual/process.texi
+++ b/libc/manual/process.texi
@@ -55,6 +55,43 @@ until the subprogram terminates before you can do anything else.
@comment ISO
@deftypefun int system (const char *@var{command})
@pindex sh
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+@c system @ascuplugin @ascuheap @asulock @aculock @acsmem
+@c do_system @ascuplugin @ascuheap @asulock @aculock @acsmem
+@c sigemptyset dup ok
+@c libc_lock_lock @asulock @aculock
+@c ADD_REF ok
+@c sigaction dup ok
+@c SUB_REF ok
+@c libc_lock_unlock @aculock
+@c sigaddset dup ok
+@c sigprocmask dup ok
+@c CLEANUP_HANDLER @ascuplugin @ascuheap @acsmem
+@c libc_cleanup_region_start @ascuplugin @ascuheap @acsmem
+@c pthread_cleanup_push_defer @ascuplugin @ascuheap @acsmem
+@c CANCELLATION_P @ascuplugin @ascuheap @acsmem
+@c CANCEL_ENABLED_AND_CANCELED ok
+@c do_cancel @ascuplugin @ascuheap @acsmem
+@c cancel_handler ok
+@c kill syscall ok
+@c waitpid dup ok
+@c libc_lock_lock ok
+@c sigaction dup ok
+@c libc_lock_unlock ok
+@c FORK ok
+@c clone syscall ok
+@c waitpid dup ok
+@c CLEANUP_RESET ok
+@c libc_cleanup_region_end ok
+@c pthread_cleanup_pop_restore ok
+@c SINGLE_THREAD_P ok
+@c LIBC_CANCEL_ASYNC @ascuplugin @ascuheap @acsmem
+@c libc_enable_asynccancel @ascuplugin @ascuheap @acsmem
+@c CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok
+@c do_cancel dup @ascuplugin @ascuheap @acsmem
+@c LIBC_CANCEL_RESET ok
+@c libc_disable_asynccancel ok
+@c lll_futex_wait dup ok
This function executes @var{command} as a shell command. In @theglibc{},
it always uses the default shell @code{sh} to run the command.
In particular, it searches the directories in @code{PATH} to find
@@ -157,12 +194,14 @@ of representing a process ID. In @theglibc{}, this is an @code{int}.
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t getpid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getpid} function returns the process ID of the current process.
@end deftypefun
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t getppid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getppid} function returns the process ID of the parent of the
current process.
@end deftypefun
@@ -177,6 +216,19 @@ It is declared in the header file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun pid_t fork (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}}
+@c The nptl/.../linux implementation safely collects fork_handlers into
+@c an alloca()ed linked list and increments ref counters; it uses atomic
+@c ops and retries, avoiding locking altogether. It then takes the
+@c IO_list lock, resets the thread-local pid, and runs fork. The parent
+@c restores the thread-local pid, releases the lock, and runs parent
+@c handlers, decrementing the ref count and signaling futex wait if
+@c requested by unregister_atfork. The child bumps the fork generation,
+@c sets the thread-local pid, resets cpu clocks, initializes the robust
+@c mutex list, the stream locks, the IO_list lock, the dynamic loader
+@c lock, runs the child handlers, reseting ref counters to 1, and
+@c initializes the fork lock. These are all safe, unless atfork
+@c handlers themselves are unsafe.
The @code{fork} function creates a new process.
If the operation is successful, there are then both parent and child
@@ -242,6 +294,9 @@ signals and signal actions from the parent process.)
@comment unistd.h
@comment BSD
@deftypefun pid_t vfork (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}}
+@c The vfork implementation proper is a safe syscall, but it may fall
+@c back to fork if the vfork syscall is not available.
The @code{vfork} function is similar to @code{fork} but on some systems
it is more efficient; however, there are restrictions you must follow to
use it safely.
@@ -287,6 +342,7 @@ header file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int execv (const char *@var{filename}, char *const @var{argv}@t{[]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{execv} function executes the file named by @var{filename} as a
new process image.
@@ -305,6 +361,7 @@ The environment for the new process image is taken from the
@comment unistd.h
@comment POSIX.1
@deftypefun int execl (const char *@var{filename}, const char *@var{arg0}, @dots{})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is similar to @code{execv}, but the @var{argv} strings are
specified individually instead of as an array. A null pointer must be
passed as the last such argument.
@@ -313,6 +370,7 @@ passed as the last such argument.
@comment unistd.h
@comment POSIX.1
@deftypefun int execve (const char *@var{filename}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is similar to @code{execv}, but permits you to specify the environment
for the new program explicitly as the @var{env} argument. This should
be an array of strings in the same format as for the @code{environ}
@@ -322,6 +380,7 @@ variable; see @ref{Environment Access}.
@comment unistd.h
@comment POSIX.1
@deftypefun int execle (const char *@var{filename}, const char *@var{arg0}, @dots{}, char *const @var{env}@t{[]})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is similar to @code{execl}, but permits you to specify the
environment for the new program explicitly. The environment argument is
passed following the null pointer that marks the last @var{argv}
@@ -332,6 +391,7 @@ the @code{environ} variable.
@comment unistd.h
@comment POSIX.1
@deftypefun int execvp (const char *@var{filename}, char *const @var{argv}@t{[]})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{execvp} function is similar to @code{execv}, except that it
searches the directories listed in the @code{PATH} environment variable
(@pxref{Standard Environment}) to find the full file name of a
@@ -345,6 +405,7 @@ to run the commands that users type.
@comment unistd.h
@comment POSIX.1
@deftypefun int execlp (const char *@var{filename}, const char *@var{arg0}, @dots{})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function is like @code{execl}, except that it performs the same
file name searching as the @code{execvp} function.
@end deftypefun
@@ -462,6 +523,7 @@ are declared in the header file @file{sys/wait.h}.
@comment sys/wait.h
@comment POSIX.1
@deftypefun pid_t waitpid (pid_t @var{pid}, int *@var{status-ptr}, int @var{options})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{waitpid} function is used to request status information from a
child process whose process ID is @var{pid}. Normally, the calling
process is suspended until the child process makes status information
@@ -565,6 +627,7 @@ terminated.
@comment sys/wait.h
@comment POSIX.1
@deftypefun pid_t wait (int *@var{status-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is a simplified version of @code{waitpid}, and is used to wait
until any one child process terminates. The call:
@@ -591,6 +654,7 @@ protected using cancellation handlers.
@comment sys/wait.h
@comment BSD
@deftypefun pid_t wait4 (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @var{usage} is a null pointer, @code{wait4} is equivalent to
@code{waitpid (@var{pid}, @var{status-ptr}, @var{options})}.
@@ -643,6 +707,7 @@ These macros are defined in the header file @file{sys/wait.h}.
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WIFEXITED (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if the child process terminated
normally with @code{exit} or @code{_exit}.
@end deftypefn
@@ -650,6 +715,7 @@ normally with @code{exit} or @code{_exit}.
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WEXITSTATUS (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @code{WIFEXITED} is true of @var{status}, this macro returns the
low-order 8 bits of the exit status value from the child process.
@xref{Exit Status}.
@@ -658,6 +724,7 @@ low-order 8 bits of the exit status value from the child process.
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WIFSIGNALED (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if the child process terminated
because it received a signal that was not handled.
@xref{Signal Handling}.
@@ -666,6 +733,7 @@ because it received a signal that was not handled.
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WTERMSIG (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @code{WIFSIGNALED} is true of @var{status}, this macro returns the
signal number of the signal that terminated the child process.
@end deftypefn
@@ -673,6 +741,7 @@ signal number of the signal that terminated the child process.
@comment sys/wait.h
@comment BSD
@deftypefn Macro int WCOREDUMP (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if the child process terminated
and produced a core dump.
@end deftypefn
@@ -680,12 +749,14 @@ and produced a core dump.
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WIFSTOPPED (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro returns a nonzero value if the child process is stopped.
@end deftypefn
@comment sys/wait.h
@comment POSIX.1
@deftypefn Macro int WSTOPSIG (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @code{WIFSTOPPED} is true of @var{status}, this macro returns the
signal number of the signal that caused the child process to stop.
@end deftypefn
@@ -739,6 +810,7 @@ more flexible. @code{wait3} is now obsolete.
@comment sys/wait.h
@comment BSD
@deftypefun pid_t wait3 (union wait *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
If @var{usage} is a null pointer, @code{wait3} is equivalent to
@code{waitpid (-1, @var{status-ptr}, @var{options})}.
diff --git a/libc/manual/resource.texi b/libc/manual/resource.texi
index 5a1bb040b..b5f0c2487 100644
--- a/libc/manual/resource.texi
+++ b/libc/manual/resource.texi
@@ -25,6 +25,8 @@ in @file{sys/resource.h}.
@comment sys/resource.h
@comment BSD
@deftypefun int getrusage (int @var{processes}, struct rusage *@var{rusage})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On HURD, this calls task_info 3 times. On UNIX, it's a syscall.
This function reports resource usage totals for processes specified by
@var{processes}, storing the information in @code{*@var{rusage}}.
@@ -132,6 +134,8 @@ scheduled).
@comment sys/vtimes.h
@deftypefun int vtimes (struct vtimes *@var{current}, struct vtimes *@var{child})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Calls getrusage twice.
@code{vtimes} reports resource usage totals for a process.
@@ -223,6 +227,8 @@ The symbols for use with @code{getrlimit}, @code{setrlimit},
@comment sys/resource.h
@comment BSD
@deftypefun int getrlimit (int @var{resource}, struct rlimit *@var{rlp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on most systems.
Read the current and maximum limits for the resource @var{resource}
and store them in @code{*@var{rlp}}.
@@ -237,6 +243,8 @@ LFS interface transparently replaces the old interface.
@comment sys/resource.h
@comment Unix98
@deftypefun int getrlimit64 (int @var{resource}, struct rlimit64 *@var{rlp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on most systems, wrapper to getrlimit otherwise.
This function is similar to @code{getrlimit} but its second parameter is
a pointer to a variable of type @code{struct rlimit64}, which allows it
to read values which wouldn't fit in the member of a @code{struct
@@ -250,6 +258,8 @@ If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
@comment sys/resource.h
@comment BSD
@deftypefun int setrlimit (int @var{resource}, const struct rlimit *@var{rlp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on most systems; lock-taking critical section on HURD.
Store the current and maximum limits for the resource @var{resource}
in @code{*@var{rlp}}.
@@ -275,6 +285,8 @@ LFS interface transparently replaces the old interface.
@comment sys/resource.h
@comment Unix98
@deftypefun int setrlimit64 (int @var{resource}, const struct rlimit64 *@var{rlp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Wrapper for setrlimit or direct syscall.
This function is similar to @code{setrlimit} but its second parameter is
a pointer to a variable of type @code{struct rlimit64} which allows it
to set values which wouldn't fit in the member of a @code{struct
@@ -434,6 +446,9 @@ above do. The functions above are better choices.
@comment ulimit.h
@comment BSD
@deftypefun {long int} ulimit (int @var{cmd}, @dots{})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Wrapper for getrlimit, setrlimit or
+@c sysconf(_SC_OPEN_MAX)->getdtablesize->getrlimit.
@code{ulimit} gets the current limit or sets the current and maximum
limit for a particular resource for the calling process according to the
@@ -480,6 +495,10 @@ A process tried to increase a maximum limit, but is not superuser.
@comment sys/vlimit.h
@comment BSD
@deftypefun int vlimit (int @var{resource}, int @var{limit})
+@safety{@prelim{}@mtunsafe{@mtasurace{:setrlimit}}@asunsafe{}@acsafe{}}
+@c It calls getrlimit and modifies the rlim_cur field before calling
+@c setrlimit. There's a window for a concurrent call to setrlimit that
+@c modifies e.g. rlim_max, which will be lost if running as super-user.
@code{vlimit} sets the current limit for a resource for a process.
@@ -778,6 +797,8 @@ absolute priority value
@comment sched.h
@comment POSIX
@deftypefun int sched_setscheduler (pid_t @var{pid}, int @var{policy}, const struct sched_param *@var{param})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function sets both the absolute priority and the scheduling policy
for a process.
@@ -848,6 +869,8 @@ tell you what the valid range is.
@comment sched.h
@comment POSIX
@deftypefun int sched_getscheduler (pid_t @var{pid})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function returns the scheduling policy assigned to the process with
Process ID (pid) @var{pid}, or the calling process if @var{pid} is zero.
@@ -881,6 +904,8 @@ absolute priority, use @code{sched_getparam}.
@comment sched.h
@comment POSIX
@deftypefun int sched_setparam (pid_t @var{pid}, const struct sched_param *@var{param})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function sets a process' absolute priority.
@@ -894,6 +919,8 @@ It is functionally identical to @code{sched_setscheduler} with
@comment sched.h
@comment POSIX
@deftypefun int sched_getparam (pid_t @var{pid}, struct sched_param *@var{param})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function returns a process' absolute priority.
@@ -923,6 +950,8 @@ There is no process with pid @var{pid} and it is not zero.
@comment sched.h
@comment POSIX
@deftypefun int sched_get_priority_min (int @var{policy})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function returns the lowest absolute priority value that is
allowable for a process with scheduling policy @var{policy}.
@@ -943,6 +972,8 @@ to this function are:
@comment sched.h
@comment POSIX
@deftypefun int sched_get_priority_max (int @var{policy})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function returns the highest absolute priority value that is
allowable for a process that with scheduling policy @var{policy}.
@@ -963,6 +994,8 @@ to this function are:
@comment sched.h
@comment POSIX
@deftypefun int sched_rr_get_interval (pid_t @var{pid}, struct timespec *@var{interval})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
This function returns the length of the quantum (time slice) used with
the Round Robin scheduling policy, if it is used, for the process with
@@ -987,6 +1020,8 @@ function, so there are no specific @code{errno} values.
@comment sched.h
@comment POSIX
@deftypefun int sched_yield (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on Linux; alias to swtch on HURD.
This function voluntarily gives up the process' claim on the CPU.
@@ -1138,6 +1173,8 @@ The highest valid nice value.
@comment sys/resource.h
@comment BSD,POSIX
@deftypefun int getpriority (int @var{class}, int @var{id})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on UNIX. On HURD, calls _hurd_priority_which_map.
Return the nice value of a set of processes; @var{class} and @var{id}
specify which ones (see below). If the processes specified do not all
have the same nice value, this returns the lowest value that any of them
@@ -1165,6 +1202,8 @@ afterward as the criterion for failure.
@comment sys/resource.h
@comment BSD,POSIX
@deftypefun int setpriority (int @var{class}, int @var{id}, int @var{niceval})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on UNIX. On HURD, calls _hurd_priority_which_map.
Set the nice value of a set of processes to @var{niceval}; @var{class}
and @var{id} specify which ones (see below).
@@ -1222,6 +1261,11 @@ process group, or its owner (real uid), according to @var{class}.
@comment unistd.h
@comment BSD
@deftypefun int nice (int @var{increment})
+@safety{@prelim{}@mtunsafe{@mtasurace{:setpriority}}@asunsafe{}@acsafe{}}
+@c Calls getpriority before and after setpriority, using the result of
+@c the first call to compute the argument for setpriority. This creates
+@c a window for a concurrent setpriority (or nice) call to be lost or
+@c exhibit surprising behavior.
Increment the nice value of the calling process by @var{increment}.
The return value is the new nice value on success, and @code{-1} on
failure. In the case of failure, @code{errno} will be set to the
@@ -1319,6 +1363,10 @@ manipulation should happen via the next four macros.
@comment sched.h
@comment GNU
@deftypefn Macro void CPU_ZERO (cpu_set_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c CPU_ZERO ok
+@c __CPU_ZERO_S ok
+@c memset dup ok
This macro initializes the CPU set @var{set} to be the empty set.
This macro is a GNU extension and is defined in @file{sched.h}.
@@ -1327,6 +1375,11 @@ This macro is a GNU extension and is defined in @file{sched.h}.
@comment sched.h
@comment GNU
@deftypefn Macro void CPU_SET (int @var{cpu}, cpu_set_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c CPU_SET ok
+@c __CPU_SET_S ok
+@c __CPUELT ok
+@c __CPUMASK ok
This macro adds @var{cpu} to the CPU set @var{set}.
The @var{cpu} parameter must not have side effects since it is
@@ -1338,6 +1391,11 @@ This macro is a GNU extension and is defined in @file{sched.h}.
@comment sched.h
@comment GNU
@deftypefn Macro void CPU_CLR (int @var{cpu}, cpu_set_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c CPU_CLR ok
+@c __CPU_CLR_S ok
+@c __CPUELT dup ok
+@c __CPUMASK dup ok
This macro removes @var{cpu} from the CPU set @var{set}.
The @var{cpu} parameter must not have side effects since it is
@@ -1349,6 +1407,11 @@ This macro is a GNU extension and is defined in @file{sched.h}.
@comment sched.h
@comment GNU
@deftypefn Macro int CPU_ISSET (int @var{cpu}, const cpu_set_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c CPU_ISSET ok
+@c __CPU_ISSET_S ok
+@c __CPUELT dup ok
+@c __CPUMASK dup ok
This macro returns a nonzero value (true) if @var{cpu} is a member
of the CPU set @var{set}, and zero (false) otherwise.
@@ -1365,6 +1428,9 @@ affinity mask can be retrieved from the system.
@comment sched.h
@comment GNU
@deftypefun int sched_getaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, cpu_set_t *@var{cpuset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Wrapped syscall to zero out past the kernel cpu set size; Linux
+@c only.
This functions stores the CPU affinity mask for the process or thread
with the ID @var{pid} in the @var{cpusetsize} bytes long bitmap
@@ -1393,6 +1459,9 @@ interface must be provided for that.
@comment sched.h
@comment GNU
@deftypefun int sched_setaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, const cpu_set_t *@var{cpuset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Wrapped syscall to detect attempts to set bits past the kernel cpu
+@c set size; Linux only.
This function installs the @var{cpusetsize} bytes long affinity mask
pointed to by @var{cpuset} for the process or thread with the ID @var{pid}.
@@ -1516,6 +1585,9 @@ There is a much older interface available, too.
@comment unistd.h
@comment BSD
@deftypefun int getpagesize (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Obtained from the aux vec at program startup time. GNU/Linux/m68k is
+@c the exception, with the possibility of a syscall.
The @code{getpagesize} function returns the page size of the process.
This value is fixed for the runtime of the process but can vary in
different runs of the application.
@@ -1559,6 +1631,8 @@ get this information two functions. They are declared in the file
@comment sys/sysinfo.h
@comment GNU
@deftypefun {long int} get_phys_pages (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c This fopens a /proc file and scans it for the requested information.
The @code{get_phys_pages} function returns the total number of pages of
physical the system has. To get the amount of memory this number has to
be multiplied by the page size.
@@ -1569,6 +1643,7 @@ This function is a GNU extension.
@comment sys/sysinfo.h
@comment GNU
@deftypefun {long int} get_avphys_pages (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
The @code{get_phys_pages} function returns the number of available pages of
physical the system has. To get the amount of memory this number has to
be multiplied by the page size.
@@ -1614,6 +1689,9 @@ in @file{sys/sysinfo.h}.
@comment sys/sysinfo.h
@comment GNU
@deftypefun int get_nprocs_conf (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c This function reads from from /sys using dir streams (single user, so
+@c no @mtasurace issue), and on some arches, from /proc using streams.
The @code{get_nprocs_conf} function returns the number of processors the
operating system configured.
@@ -1623,6 +1701,8 @@ This function is a GNU extension.
@comment sys/sysinfo.h
@comment GNU
@deftypefun int get_nprocs (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+@c This function reads from /proc using file descriptor I/O.
The @code{get_nprocs} function returns the number of available processors.
This function is a GNU extension.
@@ -1638,6 +1718,10 @@ running. This number is average over different periods of times
@comment stdlib.h
@comment BSD
@deftypefun int getloadavg (double @var{loadavg}[], int @var{nelem})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+@c Calls host_info on HURD; on Linux, opens /proc/loadavg, reads from
+@c it, closes it, without cancellation point, and calls strtod_l with
+@c the C locale to convert the strings to doubles.
This function gets the 1, 5 and 15 minute load averages of the
system. The values are placed in @var{loadavg}. @code{getloadavg} will
place at most @var{nelem} elements into the array but never more than
diff --git a/libc/manual/search.texi b/libc/manual/search.texi
index a714ba781..509a54313 100644
--- a/libc/manual/search.texi
+++ b/libc/manual/search.texi
@@ -72,6 +72,7 @@ two functions can be found in @file{search.h}.
@comment search.h
@comment SVID
@deftypefun {void *} lfind (const void *@var{key}, const void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{lfind} function searches in the array with @code{*@var{nmemb}}
elements of @var{size} bytes pointed to by @var{base} for an element
which matches the one pointed to by @var{key}. The function pointed to
@@ -90,6 +91,21 @@ searching.
@comment search.h
@comment SVID
@deftypefun {void *} lsearch (const void *@var{key}, void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c A signal handler that interrupted an insertion and performed an
+@c insertion itself would leave the array in a corrupt state (e.g. one
+@c new element initialized twice, with parts of both initializations
+@c prevailing, and another uninitialized element), but this is just a
+@c special case of races on user-controlled objects, that have to be
+@c avoided by users.
+
+@c In case of cancellation, we know the array won't be left in a corrupt
+@c state; the new element is initialized before the element count is
+@c incremented, and the compiler can't reorder these operations because
+@c it can't know that they don't alias. So, we'll either cancel after
+@c the increment and the initialization are both complete, or the
+@c increment won't have taken place, and so how far the initialization
+@c got doesn't matter.
The @code{lsearch} function is similar to the @code{lfind} function. It
searches the given array for an element and returns it if found. The
difference is that if no matching element is found the @code{lsearch}
@@ -113,6 +129,7 @@ the header file @file{stdlib.h}.
@comment stdlib.h
@comment ISO
@deftypefun {void *} bsearch (const void *@var{key}, const void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{bsearch} function searches the sorted array @var{array} for an object
that is equivalent to @var{key}. The array contains @var{count} elements,
each of which is of size @var{size} bytes.
@@ -146,6 +163,7 @@ To sort an array using an arbitrary comparison function, use the
@comment stdlib.h
@comment ISO
@deftypefun void qsort (void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}}
The @var{qsort} function sorts the array @var{array}. The array contains
@var{count} elements, each of which is of size @var{size}.
@@ -256,6 +274,9 @@ The following functions are declared in the header file @file{search.h}.
@comment search.h
@comment SVID
@deftypefun int hcreate (size_t @var{nel})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c hcreate @mtasurace:hsearch @ascuheap @acucorrupt @acsmem
+@c hcreate_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem
The @code{hcreate} function creates a hashing table which can contain at
least @var{nel} elements. There is no possibility to grow this table so
it is necessary to choose the value for @var{nel} wisely. The method
@@ -285,6 +306,9 @@ table in use or the program runs out of memory.
@comment search.h
@comment SVID
@deftypefun void hdestroy (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c hdestroy @mtasurace:hsearch @ascuheap @acucorrupt @acsmem
+@c hdestroy_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem
The @code{hdestroy} function can be used to free all the resources
allocated in a previous call of @code{hcreate}. After a call to this
function it is again possible to call @code{hcreate} and allocate a new
@@ -328,6 +352,9 @@ this element might stay undefined since it is not used.
@comment search.h
@comment SVID
@deftypefun {ENTRY *} hsearch (ENTRY @var{item}, ACTION @var{action})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{}@acunsafe{@acucorrupt{/action==ENTER}}}
+@c hsearch @mtasurace:hsearch @acucorrupt/action==ENTER
+@c hsearch_r dup @mtsrace:htab @acucorrupt/action==ENTER
To search in a hashing table created using @code{hcreate} the
@code{hsearch} function must be used. This function can perform simple
search for an element (if @var{action} has the @code{FIND}) or it can
@@ -358,6 +385,24 @@ members should be changed directly.
@comment search.h
@comment GNU
@deftypefun int hcreate_r (size_t @var{nel}, struct hsearch_data *@var{htab})
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c Unlike the lsearch array, the htab is (at least in part) opaque, so
+@c let's make it absolutely clear that ensuring exclusive access is a
+@c caller responsibility.
+
+@c Cancellation is unlikely to leave the htab in a corrupt state: the
+@c last field to be initialized is the one that tells whether the entire
+@c data structure was initialized, and there's a function call (calloc)
+@c in between that will often ensure all other fields are written before
+@c the table. However, should this call be inlined (say with LTO), this
+@c assumption may not hold. The calloc call doesn't cross our library
+@c interface barrier, so let's consider this could happen and mark this
+@c with @acucorrupt. It's no safety loss, since we already have
+@c @ascuheap anyway...
+
+@c hcreate_r @mtsrace:htab @ascuheap @acucorrupt @acsmem
+@c isprime ok
+@c calloc dup @ascuheap @acsmem
The @code{hcreate_r} function initializes the object pointed to by
@var{htab} to contain a hashing table with at least @var{nel} elements.
So this function is equivalent to the @code{hcreate} function except
@@ -376,6 +421,16 @@ programs ran out of memory.
@comment search.h
@comment GNU
@deftypefun void hdestroy_r (struct hsearch_data *@var{htab})
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c The table is released while the table pointer still points to it.
+@c Async cancellation is thus unsafe, but it already was because we call
+@c free(). Using the table in a handler while it's being released would
+@c also be dangerous, but calling free() already makes it unsafe, and
+@c the requirement on the caller to ensure exclusive access already
+@c guarantees this doesn't happen, so we don't get @asucorrupt.
+
+@c hdestroy_r @mtsrace:htab @ascuheap @acucorrupt @acsmem
+@c free dup @ascuheap @acsmem
The @code{hdestroy_r} function frees all resources allocated by the
@code{hcreate_r} function for this very same object @var{htab}. As for
@code{hdestroy} it is the programs responsibility to free the strings
@@ -385,6 +440,13 @@ for the elements of the table.
@comment search.h
@comment GNU
@deftypefun int hsearch_r (ENTRY @var{item}, ACTION @var{action}, ENTRY **@var{retval}, struct hsearch_data *@var{htab})
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@assafe{}@acunsafe{@acucorrupt{/action==ENTER}}}
+@c Callers have to ensure mutual exclusion; insertion, if cancelled,
+@c leaves the table in a corrupt state.
+
+@c hsearch_r @mtsrace:htab @acucorrupt/action==ENTER
+@c strlen dup ok
+@c strcmp dup ok
The @code{hsearch_r} function is equivalent to @code{hsearch}. The
meaning of the first two arguments is identical. But instead of
operating on a single global hashing table the function works on the
@@ -436,6 +498,12 @@ in the header file @file{search.h}.
@comment search.h
@comment SVID
@deftypefun {void *} tsearch (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar})
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c The tree is not modified in a thread-safe manner, and rotations may
+@c leave the tree in an inconsistent state that could be observed in an
+@c asynchronous signal handler (except for the caller-synchronization
+@c requirement) or after asynchronous cancellation of the thread
+@c performing the rotation or the insertion.
The @code{tsearch} function searches in the tree pointed to by
@code{*@var{rootp}} for an element matching @var{key}. The function
pointed to by @var{compar} is used to determine whether two elements
@@ -465,6 +533,7 @@ of space @code{NULL} is returned.
@comment search.h
@comment SVID
@deftypefun {void *} tfind (const void *@var{key}, void *const *@var{rootp}, comparison_fn_t @var{compar})
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@assafe{}@acsafe{}}
The @code{tfind} function is similar to the @code{tsearch} function. It
locates an element matching the one pointed to by @var{key} and returns
a pointer to this element. But if no matching element is available no
@@ -479,6 +548,7 @@ elements.
@comment search.h
@comment SVID
@deftypefun {void *} tdelete (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar})
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
To remove a specific element matching @var{key} from the tree
@code{tdelete} can be used. It locates the matching element using the
same method as @code{tfind}. The corresponding element is then removed
@@ -492,6 +562,7 @@ is deleted @code{tdelete} returns some unspecified value not equal to
@comment search.h
@comment GNU
@deftypefun void tdestroy (void *@var{vroot}, __free_fn_t @var{freefct})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
If the complete search tree has to be removed one can use
@code{tdestroy}. It frees all resources allocated by the @code{tsearch}
function to generate the tree pointed to by @var{vroot}.
@@ -546,6 +617,7 @@ The current node is a leaf.
@comment search.h
@comment SVID
@deftypefun void twalk (const void *@var{root}, __action_fn_t @var{action})
+@safety{@prelim{}@mtsafe{@mtsrace{:root}}@assafe{}@acsafe{}}
For each node in the tree with a node pointed to by @var{root}, the
@code{twalk} function calls the function provided by the parameter
@var{action}. For leaf nodes the function is called exactly once with
diff --git a/libc/manual/setjmp.texi b/libc/manual/setjmp.texi
index b3c0a7ba5..b924d582b 100644
--- a/libc/manual/setjmp.texi
+++ b/libc/manual/setjmp.texi
@@ -107,6 +107,10 @@ identify a specific place to return to.
@comment setjmp.h
@comment ISO
@deftypefn Macro int setjmp (jmp_buf @var{state})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c _setjmp ok
+@c __sigsetjmp(!savemask) ok
+@c __sigjmp_save(!savemask) ok, does not call sigprocmask
When called normally, @code{setjmp} stores information about the
execution state of the program in @var{state} and returns zero. If
@code{longjmp} is later used to perform a non-local exit to this
@@ -116,6 +120,20 @@ execution state of the program in @var{state} and returns zero. If
@comment setjmp.h
@comment ISO
@deftypefun void longjmp (jmp_buf @var{state}, int @var{value})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}}
+@c __libc_siglongjmp @ascuplugin @asucorrupt @asulock/hurd @acucorrupt @aculock/hurd
+@c _longjmp_unwind @ascuplugin @asucorrupt @acucorrupt
+@c __pthread_cleanup_upto @ascuplugin @asucorrupt @acucorrupt
+@c plugins may be unsafe themselves, but even if they weren't, this
+@c function isn't robust WRT async signals and cancellation:
+@c cleanups aren't taken off the stack right away, only after all
+@c cleanups have been run. This means that async-cancelling
+@c longjmp, or interrupting longjmp with an async signal handler
+@c that calls longjmp may run the same cleanups multiple times.
+@c _JMPBUF_UNWINDS_ADJ ok
+@c *cleanup_buf->__routine @ascuplugin
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd
+@c __longjmp ok
This function restores current execution to the state saved in
@var{state}, and continues execution from the call to @code{setjmp} that
established that return point. Returning from @code{setjmp} by means of
@@ -199,6 +217,11 @@ information about the set of blocked signals.
@comment setjmp.h
@comment POSIX.1
@deftypefun int sigsetjmp (sigjmp_buf @var{state}, int @var{savesigs})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c sigsetjmp @asulock/hurd @aculock/hurd
+@c __sigsetjmp(savemask) @asulock/hurd @aculock/hurd
+@c __sigjmp_save(savemask) @asulock/hurd @aculock/hurd
+@c sigprocmask(SIG_BLOCK probe) dup @asulock/hurd @aculock/hurd
This is similar to @code{setjmp}. If @var{savesigs} is nonzero, the set
of blocked signals is saved in @var{state} and will be restored if a
@code{siglongjmp} is later performed with this @var{state}.
@@ -207,6 +230,8 @@ of blocked signals is saved in @var{state} and will be restored if a
@comment setjmp.h
@comment POSIX.1
@deftypefun void siglongjmp (sigjmp_buf @var{state}, int @var{value})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}}
+@c Alias to longjmp.
This is similar to @code{longjmp} except for the type of its @var{state}
argument. If the @code{sigsetjmp} call that set this @var{state} used a
nonzero @var{savesigs} flag, @code{siglongjmp} also restores the set of
@@ -267,6 +292,10 @@ and modification happens through one of the following functions:
@comment ucontext.h
@comment SVID
@deftypefun int getcontext (ucontext_t *@var{ucp})
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}}
+@c Linux-only implementations in assembly, including sigprocmask
+@c syscall. A few cases call the sigprocmask function, but that's safe
+@c too. The ppc case is implemented in terms of a swapcontext syscall.
The @code{getcontext} function initializes the variable pointed to by
@var{ucp} with the context of the calling thread. The context contains
the content of the registers, the signal mask, and the current stack.
@@ -293,6 +322,8 @@ used to do that.
@comment ucontext.h
@comment SVID
@deftypefun void makecontext (ucontext_t *@var{ucp}, void (*@var{func}) (void), int @var{argc}, @dots{})
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}}
+@c Linux-only implementations mostly in assembly, nothing unsafe.
The @var{ucp} parameter passed to the @code{makecontext} shall be
initialized by a call to @code{getcontext}. The context will be
@@ -339,6 +370,15 @@ requires detection of the platform at compile time.
@comment ucontext.h
@comment SVID
@deftypefun int setcontext (const ucontext_t *@var{ucp})
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c Linux-only implementations mostly in assembly. Some ports use
+@c sigreturn or swapcontext syscalls; others restore the signal mask
+@c first and then proceed restore other registers in userland, which
+@c leaves a window for cancellation or async signals with misaligned or
+@c otherwise corrupt stack. ??? Switching to a different stack, or even
+@c to an earlier state on the same stack, may conflict with pthread
+@c cleanups. This is not quite MT-Unsafe, it's a different kind of
+@c safety issue.
The @code{setcontext} function restores the context described by
@var{ucp}. The context is not modified and can be reused as often as
@@ -372,6 +412,10 @@ there are situations where the current context has to be preserved.
@comment ucontext.h
@comment SVID
@deftypefun int swapcontext (ucontext_t *restrict @var{oucp}, const ucontext_t *restrict @var{ucp})
+@safety{@prelim{}@mtsafe{@mtsrace{:oucp} @mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c Linux-only implementations mostly in assembly. Some ports call or
+@c inline getcontext and/or setcontext, adjusting the saved context in
+@c between, so we inherit the potential issues of both.
The @code{swapcontext} function is similar to @code{setcontext} but
instead of just replacing the current context the latter is first saved
diff --git a/libc/manual/signal.texi b/libc/manual/signal.texi
index adcda3752..f0e57ddbe 100644
--- a/libc/manual/signal.texi
+++ b/libc/manual/signal.texi
@@ -889,6 +889,20 @@ may come from a signal handler in the same process.
@comment string.h
@comment GNU
@deftypefun {char *} strsignal (int @var{signum})
+@safety{@prelim{}@mtunsafe{@mtasurace{:strsignal} @mtslocale{}}@asunsafe{@asuinit{} @ascuintl{} @asucorrupt{} @ascuheap{}}@acunsafe{@acuinit{} @acucorrupt{} @acsmem{}}}
+@c strsignal @mtasurace:strsignal @mtslocale @asuinit @ascuintl @asucorrupt @ascuheap @acucorrupt @acsmem
+@c uses a static buffer if tsd key creation fails
+@c [once] init
+@c libc_key_create ok
+@c pthread_key_create dup ok
+@c getbuffer @asucorrupt @ascuheap @acsmem
+@c libc_getspecific ok
+@c pthread_getspecific dup ok
+@c malloc dup @ascuheap @acsmem
+@c libc_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem
+@c pthread_setspecific dup @asucorrupt @ascuheap @acucorrupt @acsmem
+@c snprintf dup @mtslocale @ascuheap @acsmem
+@c _ @ascuintl
This function returns a pointer to a statically-allocated string
containing a message describing the signal @var{signum}. You
should not modify the contents of this string; and, since it can be
@@ -903,6 +917,12 @@ This function is a GNU extension, declared in the header file
@comment signal.h
@comment BSD
@deftypefun void psignal (int @var{signum}, const char *@var{message})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
+@c psignal @mtslocale @asucorrupt @ascuintl @ascuheap @aculock @acucorrupt @acsmem
+@c _ @ascuintl
+@c fxprintf @asucorrupt @aculock @acucorrupt
+@c asprintf @mtslocale @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
This function prints a message describing the signal @var{signum} to the
standard error output stream @code{stderr}; see @ref{Standard Streams}.
@@ -972,6 +992,12 @@ The name @code{sighandler_t} for this data type is a GNU extension.
@comment signal.h
@comment ISO
@deftypefun sighandler_t signal (int @var{signum}, sighandler_t @var{action})
+@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}}
+@c signal ok
+@c sigemptyset dup ok
+@c sigaddset dup ok
+@c sigismember dup ok
+@c sigaction dup ok
The @code{signal} function establishes @var{action} as the action for
the signal @var{signum}.
@@ -1094,6 +1120,10 @@ example because these are designed to provide information for debugging
@comment signal.h
@comment GNU
@deftypefun sighandler_t sysv_signal (int @var{signum}, sighandler_t @var{action})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c sysv_signal ok
+@c sigemptyset dup ok
+@c sigaction dup ok
The @code{sysv_signal} implements the behavior of the standard
@code{signal} function as found on SVID systems. The difference to BSD
systems is that the handler is deinstalled after a delivery of a signal.
@@ -1106,6 +1136,8 @@ preferred method.
@comment signal.h
@comment SVID
@deftypefun sighandler_t ssignal (int @var{signum}, sighandler_t @var{action})
+@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}}
+@c Aliases signal and bsd_signal.
The @code{ssignal} function does the same thing as @code{signal}; it is
provided only for compatibility with SVID.
@end deftypefun
@@ -1172,6 +1204,7 @@ the signal. These are described in more detail in @ref{Flags for Sigaction}.
@comment signal.h
@comment POSIX.1
@deftypefun int sigaction (int @var{signum}, const struct sigaction *restrict @var{action}, struct sigaction *restrict @var{old-action})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @var{action} argument is used to set up a new action for the signal
@var{signum}, while the @var{old-action} argument is used to return
information about the action previously associated with this symbol.
@@ -2168,6 +2201,14 @@ function is declared in @file{signal.h}.
@comment signal.h
@comment ISO
@deftypefun int raise (int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c raise ok
+@c [posix]
+@c getpid dup ok
+@c kill dup ok
+@c [linux]
+@c syscall(gettid) ok
+@c syscall(tgkill) ok
The @code{raise} function sends the signal @var{signum} to the calling
process. It returns zero if successful and a nonzero value if it fails.
About the only reason for failure would be if the value of @var{signum}
@@ -2177,6 +2218,8 @@ is invalid.
@comment signal.h
@comment SVID
@deftypefun int gsignal (int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Aliases raise.
The @code{gsignal} function does the same thing as @code{raise}; it is
provided only for compatibility with SVID.
@end deftypefun
@@ -2269,6 +2312,11 @@ The @code{kill} function is declared in @file{signal.h}.
@comment signal.h
@comment POSIX.1
@deftypefun int kill (pid_t @var{pid}, int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c The hurd implementation is not a critical section, so it's not
+@c immediately obvious that, in case of cancellation, it won't leak
+@c ports or the memory allocated by proc_getpgrppids when pid <= 0.
+@c Since none of these make it AC-Unsafe, I'm leaving them out.
The @code{kill} function sends the signal @var{signum} to the process
or process group specified by @var{pid}. Besides the signals listed in
@ref{Standard Signals}, @var{signum} can also have a value of zero to
@@ -2325,6 +2373,8 @@ The @var{pid} argument does not refer to an existing process or group.
@comment signal.h
@comment BSD
@deftypefun int killpg (int @var{pgid}, int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Calls kill with -pgid.
This is similar to @code{kill}, but sends signal @var{signum} to the
process group @var{pgid}. This function is provided for compatibility
with BSD; using @code{kill} to do this is more portable.
@@ -2497,6 +2547,8 @@ about.)
@comment signal.h
@comment POSIX.1
@deftypefun int sigemptyset (sigset_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Just memsets all of set to zero.
This function initializes the signal set @var{set} to exclude all of the
defined signals. It always returns @code{0}.
@end deftypefun
@@ -2504,6 +2556,7 @@ defined signals. It always returns @code{0}.
@comment signal.h
@comment POSIX.1
@deftypefun int sigfillset (sigset_t *@var{set})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function initializes the signal set @var{set} to include
all of the defined signals. Again, the return value is @code{0}.
@end deftypefun
@@ -2511,6 +2564,7 @@ all of the defined signals. Again, the return value is @code{0}.
@comment signal.h
@comment POSIX.1
@deftypefun int sigaddset (sigset_t *@var{set}, int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function adds the signal @var{signum} to the signal set @var{set}.
All @code{sigaddset} does is modify @var{set}; it does not block or
unblock any signals.
@@ -2527,6 +2581,7 @@ The @var{signum} argument doesn't specify a valid signal.
@comment signal.h
@comment POSIX.1
@deftypefun int sigdelset (sigset_t *@var{set}, int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function removes the signal @var{signum} from the signal set
@var{set}. All @code{sigdelset} does is modify @var{set}; it does not
block or unblock any signals. The return value and error conditions are
@@ -2538,6 +2593,7 @@ Finally, there is a function to test what signals are in a signal set:
@comment signal.h
@comment POSIX.1
@deftypefun int sigismember (const sigset_t *@var{set}, int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{sigismember} function tests whether the signal @var{signum} is
a member of the signal set @var{set}. It returns @code{1} if the signal
is in the set, @code{0} if not, and @code{-1} if there is an error.
@@ -2576,6 +2632,10 @@ Instead, use @code{pthread_sigmask}.
@comment signal.h
@comment POSIX.1
@deftypefun int sigprocmask (int @var{how}, const sigset_t *restrict @var{set}, sigset_t *restrict @var{oldset})
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/bsd(SIG_UNBLOCK)}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c This takes the hurd_self_sigstate-returned object's lock on HURD. On
+@c BSD, SIG_UNBLOCK is emulated with two sigblock calls, which
+@c introduces a race window.
The @code{sigprocmask} function is used to examine or change the calling
process's signal mask. The @var{how} argument determines how the signal
mask is changed, and must be one of the following values:
@@ -2759,6 +2819,10 @@ You can find out which signals are pending at any time by calling
@comment signal.h
@comment POSIX.1
@deftypefun int sigpending (sigset_t *@var{set})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c Direct rt_sigpending syscall on most systems. On hurd, calls
+@c hurd_self_sigstate, it copies the sigstate's pending while holding
+@c its lock.
The @code{sigpending} function stores information about pending signals
in @var{set}. If there is a pending signal that is blocked from
delivery, then that signal is a member of the returned set. (You can
@@ -2922,6 +2986,17 @@ you use it.
@comment unistd.h
@comment POSIX.1
@deftypefun int pause (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c The signal mask read by sigprocmask may be overridden by another
+@c thread or by a signal handler before we call sigsuspend. Is this a
+@c safety issue? Probably not.
+@c pause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+@c [ports/linux/generic]
+@c syscall_pause ok
+@c [posix]
+@c sigemptyset dup ok
+@c sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
+@c sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
The @code{pause} function suspends program execution until a signal
arrives whose action is either to execute a handler function, or to
terminate the process.
@@ -3017,6 +3092,18 @@ signals be handled by their handlers.
@comment signal.h
@comment POSIX.1
@deftypefun int sigsuspend (const sigset_t *@var{set})
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c sigsuspend @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+@c [posix] @mtasurace:sigprocmask/!bsd!linux
+@c saving and restoring the procmask is racy
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
+@c pause @asulock/hurd @aculock/hurd
+@c [bsd]
+@c sigismember dup ok
+@c sigmask dup ok
+@c sigpause dup ok [no @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd]
+@c [linux]
+@c do_sigsuspend ok
This function replaces the process's signal mask with @var{set} and then
suspends the process until a signal is delivered whose action is either
to terminate the process or invoke a signal handling function. In other
@@ -3150,6 +3237,9 @@ delivered on the normal user stack.
@comment signal.h
@comment XPG
@deftypefun int sigaltstack (const stack_t *restrict @var{stack}, stack_t *restrict @var{oldstack})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c Syscall on Linux and BSD; the HURD implementation takes a lock on
+@c the hurd_self_sigstate-returned struct.
The @code{sigaltstack} function specifies an alternate stack for use
during signal handling. When a signal is received by the process and
its action indicates that the signal stack is used, the system arranges
@@ -3196,6 +3286,8 @@ This field is true if the process is currently using this stack.
@comment signal.h
@comment BSD
@deftypefun int sigstack (struct sigstack *@var{stack}, struct sigstack *@var{oldstack})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c Lossy and dangerous (no size limit) wrapper for sigaltstack.
The @code{sigstack} function specifies an alternate stack for use during
signal handling. When a signal is received by the process and its
action indicates that the signal stack is used, the system arranges a
@@ -3301,6 +3393,13 @@ structure, it means to reset the action for the signal back to
@comment signal.h
@comment BSD
@deftypefun int sigvec (int @var{signum}, const struct sigvec *@var{action}, struct sigvec *@var{old-action})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This is mostly a safe wrapper for sigaction. The exception are
+@c systems that lack SA_RESETHAND, in which a signal handler wrapper is
+@c used that calls sigaction to reset the handler before calling the
+@c user-supplied handler; it's unlikely that this emulation is used
+@c anywhere, for user-supplied flags and mask don't seem to be used
+@c the way one would expect.
This function is the equivalent of @code{sigaction} (@pxref{Advanced Signal
Handling}); it installs the action @var{action} for the signal @var{signum},
returning information about the previous action in effect for that signal
@@ -3310,6 +3409,14 @@ in @var{old-action}.
@comment signal.h
@comment BSD
@deftypefun int siginterrupt (int @var{signum}, int @var{failflag})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtssigintr{}}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+@c This calls sigaction twice, once to get the current sigaction for the
+@c specified signal, another to apply the flags change. This could
+@c override the effects of a concurrent sigaction call. It also
+@c modifies without any guards the global _sigintr variable, that
+@c bsd_signal reads from, and it may leave _sigintr modified without
+@c overriding the active handler if cancelled between the two
+@c operations.
This function specifies which approach to use when certain primitives
are interrupted by handling signal @var{signum}. If @var{failflag} is
false, signal @var{signum} restarts primitives. If @var{failflag} is
@@ -3323,6 +3430,8 @@ code @code{EINTR}. @xref{Interrupted Primitives}.
@comment signal.h
@comment BSD
@deftypefn Macro int sigmask (int @var{signum})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c This just shifts signum.
This macro returns a signal mask that has the bit for signal @var{signum}
set. You can bitwise-OR the results of several calls to @code{sigmask}
together to specify more than one signal. For example,
@@ -3339,6 +3448,11 @@ specifies a mask that includes all the job-control stop signals.
@comment signal.h
@comment BSD
@deftypefun int sigblock (int @var{mask})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_BLOCK).
+@c The exception are BSD systems other than 4.4, where it is a syscall.
+@c sigblock @asulock/hurd @aculock/hurd
+@c sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
This function is equivalent to @code{sigprocmask} (@pxref{Process Signal
Mask}) with a @var{how} argument of @code{SIG_BLOCK}: it adds the
signals specified by @var{mask} to the calling process's set of blocked
@@ -3348,6 +3462,11 @@ signals. The return value is the previous set of blocked signals.
@comment signal.h
@comment BSD
@deftypefun int sigsetmask (int @var{mask})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_SETMASK).
+@c The exception are BSD systems other than 4.4, where it is a syscall.
+@c sigsetmask @asulock/hurd @aculock/hurd
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
This function equivalent to @code{sigprocmask} (@pxref{Process
Signal Mask}) with a @var{how} argument of @code{SIG_SETMASK}: it sets
the calling process's signal mask to @var{mask}. The return value is
@@ -3357,6 +3476,15 @@ the previous set of blocked signals.
@comment signal.h
@comment BSD
@deftypefun int sigpause (int @var{mask})
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
+@c sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+@c [posix]
+@c __sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+@c do_sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+@c sigprocmask(0) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
+@c sigdelset dup ok
+@c sigset_set_old_mask dup ok
+@c sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
This function is the equivalent of @code{sigsuspend} (@pxref{Waiting
for a Signal}): it sets the calling process's signal mask to @var{mask},
and waits for a signal to arrive. On return the previous set of blocked
diff --git a/libc/manual/socket.texi b/libc/manual/socket.texi
index 4c7e623b2..6ee82010f 100644
--- a/libc/manual/socket.texi
+++ b/libc/manual/socket.texi
@@ -394,6 +394,8 @@ For examples of use, see @ref{Local Socket Example}, or see @ref{Inet Example}.
@comment sys/socket.h
@comment BSD
@deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, except on Hurd.
The @code{bind} function assigns an address to the socket
@var{socket}. The @var{addr} and @var{length} arguments specify the
address; the detailed format of the address depends on the namespace.
@@ -442,6 +444,9 @@ Internet socket. The prototype for this function is in the header file
@comment sys/socket.h
@comment BSD
@deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsmem{/hurd}}}
+@c Direct syscall, except on Hurd, where it seems like it might leak
+@c VM if cancelled.
The @code{getsockname} function returns information about the
address of the socket @var{socket} in the locations specified by the
@var{addr} and @var{length-ptr} arguments. Note that the
@@ -501,6 +506,14 @@ interface name, including its terminating zero byte.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {unsigned int} if_nametoindex (const char *@var{ifname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c It opens a socket to use ioctl on the fd to get the index.
+@c opensock may call socket and access multiple times until it finds a
+@c socket family that works. The Linux implementation has a potential
+@c concurrency issue WRT last_type and last_family not being updated
+@c atomically, but it is harmless; the generic implementation, OTOH,
+@c takes a lock, which makes all callers AS- and AC-Unsafe.
+@c opensock @asulock @aculock @acsfd
This function yields the interface index corresponding to a particular
name. If no interface exists with the name given, it returns 0.
@end deftypefun
@@ -508,6 +521,9 @@ name. If no interface exists with the name given, it returns 0.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {char *} if_indextoname (unsigned int @var{ifindex}, char *@var{ifname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c It opens a socket with opensock to use ioctl on the fd to get the
+@c name from the index.
This function maps an interface index to its corresponding name. The
returned name is placed in the buffer pointed to by @code{ifname}, which
must be at least @code{IFNAMSIZ} bytes in length. If the index was
@@ -534,6 +550,39 @@ This is the null-terminated index name.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {struct if_nameindex *} if_nameindex (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@aculock{/hurd} @acsfd{} @acsmem{}}}
+@c if_nameindex @ascuheap @asulock/hurd @aculock/hurd @acsfd @acsmem
+@c [linux]
+@c netlink_open @acsfd @acsmem/hurd
+@c socket dup @acsfd
+@c memset dup ok
+@c bind dup ok
+@c netlink_close dup @acsfd
+@c getsockname dup @acsmem/hurd
+@c netlink_request @ascuheap @acsmem
+@c getpagesize dup ok
+@c malloc dup @ascuheap @acsmem
+@c netlink_sendreq ok
+@c memset dup ok
+@c sendto dup ok
+@c recvmsg dup ok
+@c memcpy dup ok
+@c free dup @ascuheap @acsmem
+@c netlink_free_handle @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c netlink_close @acsfd
+@c close dup @acsfd
+@c malloc dup @asuheap @acsmem
+@c strndup @ascuheap @acsmem
+@c if_freenameindex @ascuheap @acsmem
+@c [hurd]
+@c opensock dup @asulock @aculock @acsfd
+@c hurd_socket_server ok
+@c pfinet_siocgifconf ok
+@c malloc @ascuheap @acsmem
+@c strdup @ascuheap @acsmem
+@c ioctl dup ok
+@c free @ascuheap @acsmem
This function returns an array of @code{if_nameindex} structures, one
for every interface that is present. The end of the list is indicated
by a structure with an interface of 0 and a null name pointer. If an
@@ -546,6 +595,9 @@ use.
@comment net/if.h
@comment IPv6 basic API
@deftypefun void if_freenameindex (struct if_nameindex *@var{ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c if_freenameindex @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
This function frees the structure returned by an earlier call to
@code{if_nameindex}.
@end deftypefun
@@ -660,6 +712,7 @@ the file name string. This can be done using the macro @code{SUN_LEN}:
@comment sys/un.h
@comment BSD
@deftypefn {Macro} int SUN_LEN (@emph{struct sockaddr_un *} @var{ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The macro computes the length of socket address in the local namespace.
@end deftypefn
@@ -1035,6 +1088,13 @@ Order}, for an explanation of network and host byte order.
@comment arpa/inet.h
@comment BSD
@deftypefun int inet_aton (const char *@var{name}, struct in_addr *@var{addr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_aton @mtslocale
+@c isdigit dup @mtslocale
+@c strtoul dup @mtslocale
+@c isascii dup @mtslocale
+@c isspace dup @mtslocale
+@c htonl dup ok
This function converts the IPv4 Internet host address @var{name}
from the standard numbers-and-dots notation into binary data and stores
it in the @code{struct in_addr} that @var{addr} points to.
@@ -1044,6 +1104,9 @@ it in the @code{struct in_addr} that @var{addr} points to.
@comment arpa/inet.h
@comment BSD
@deftypefun {uint32_t} inet_addr (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_addr @mtslocale
+@c inet_aton dup @mtslocale
This function converts the IPv4 Internet host address @var{name} from the
standard numbers-and-dots notation into binary data. If the input is
not valid, @code{inet_addr} returns @code{INADDR_NONE}. This is an
@@ -1056,6 +1119,12 @@ indicate error return.
@comment arpa/inet.h
@comment BSD
@deftypefun {uint32_t} inet_network (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_network @mtslocale
+@c isdigit dup @mtslocale
+@c isxdigit dup @mtslocale
+@c tolower dup @mtslocale
+@c isspace dup @mtslocale
This function extracts the network number from the address @var{name},
given in the standard numbers-and-dots notation. The returned address is
in host order. If the input is not valid, @code{inet_network} returns
@@ -1069,6 +1138,10 @@ anymore.
@comment arpa/inet.h
@comment BSD
@deftypefun {char *} inet_ntoa (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asurace{}}@acsafe{}}
+@c inet_ntoa @mtslocale @asurace
+@c writes to a thread-local static buffer
+@c snprintf @mtslocale [no @ascuheap or @acsmem]
This function converts the IPv4 Internet host address @var{addr} to a
string in the standard numbers-and-dots notation. The return value is
a pointer into a statically-allocated buffer. Subsequent calls will
@@ -1087,6 +1160,9 @@ addresses.
@comment arpa/inet.h
@comment BSD
@deftypefun {struct in_addr} inet_makeaddr (uint32_t @var{net}, uint32_t @var{local})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_makeaddr ok
+@c htonl dup ok
This function makes an IPv4 Internet host address by combining the network
number @var{net} with the local-address-within-network number
@var{local}.
@@ -1095,6 +1171,11 @@ number @var{net} with the local-address-within-network number
@comment arpa/inet.h
@comment BSD
@deftypefun uint32_t inet_lnaof (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_lnaof ok
+@c ntohl dup ok
+@c IN_CLASSA ok
+@c IN_CLASSB ok
This function returns the local-address-within-network part of the
Internet host address @var{addr}.
@@ -1106,6 +1187,11 @@ anymore.
@comment arpa/inet.h
@comment BSD
@deftypefun uint32_t inet_netof (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_netof ok
+@c ntohl dup ok
+@c IN_CLASSA ok
+@c IN_CLASSB ok
This function returns the network number part of the Internet host
address @var{addr}.
@@ -1117,6 +1203,16 @@ anymore.
@comment arpa/inet.h
@comment IPv6 basic API
@deftypefun int inet_pton (int @var{af}, const char *@var{cp}, void *@var{buf})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_pton @mtslocale
+@c inet_pton4 ok
+@c memcpy dup ok
+@c inet_pton6 @mtslocale
+@c memset dup ok
+@c tolower dup @mtslocale
+@c strchr dup ok
+@c inet_pton4 dup ok
+@c memcpy dup ok
This function converts an Internet address (either IPv4 or IPv6) from
presentation (textual) to network (binary) format. @var{af} should be
either @code{AF_INET} or @code{AF_INET6}, as appropriate for the type of
@@ -1128,6 +1224,16 @@ responsibility to make sure the buffer is large enough.
@comment arpa/inet.h
@comment IPv6 basic API
@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, socklen_t @var{len})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_ntop @mtslocale
+@c inet_ntop4 @mtslocale
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem]
+@c strcpy dup ok
+@c inet_ntop6 @mtslocale
+@c memset dup ok
+@c inet_ntop4 dup @mtslocale
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem]
+@c strcpy dup ok
This function converts an Internet address (either IPv4 or IPv6) from
network (binary) to presentation (textual) form. @var{af} should be
either @code{AF_INET} or @code{AF_INET6}, as appropriate. @var{cp} is a
@@ -1211,6 +1317,71 @@ need to save it across calls. You can also use @code{getaddrinfo} and
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostbyname (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname @mtasurace:hostbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c nss_hostname_digits_dots @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_maybe_init(!preinit) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_iclose @acsuheap @acsmem @acsfd
+@c close_not_cancel_no_status dup @acsfd
+@c free dup @acsuheap @acsmem
+@c res_vinit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_randomid ok
+@c getpid dup ok
+@c getenv dup @mtsenv
+@c strncpy dup ok
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no concurrent uses]
+@c fgets_unlocked dup ok [no concurrent uses]
+@c MATCH ok
+@c strncmp dup ok
+@c strpbrk dup ok
+@c strchr dup ok
+@c inet_aton dup @mtslocale
+@c htons dup
+@c inet_pton dup @mtslocale
+@c malloc dup @ascuheap @acsmem
+@c IN6_IS_ADDR_LINKLOCAL ok
+@c htonl dup ok
+@c IN6_IS_ADDR_MC_LINKLOCAL ok
+@c if_nametoindex dup @asulock @aculock @acsfd
+@c strtoul dup @mtslocale
+@c ISSORTMASK ok
+@c strchr dup ok
+@c isascii dup @mtslocale
+@c isspace dup @mtslocale
+@c net_mask ok
+@c ntohl dup ok
+@c IN_CLASSA dup ok
+@c htonl dup ok
+@c IN_CLASSB dup ok
+@c res_setoptions @mtslocale
+@c strncmp dup ok
+@c atoi dup @mtslocale
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c inet_makeaddr dup ok
+@c gethostname dup ok
+@c strcpy dup ok
+@c rawmemchr dup ok
+@c res_ninit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_vinit dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c isdigit dup @mtslocale
+@c isxdigit dup @mtslocale
+@c strlen dup ok
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c memset dup ok
+@c inet_aton dup @mtslocale
+@c inet_pton dup @mtslocale
+@c strcpy dup ok
+@c memcpy dup ok
+@c strchr dup ok
+@c gethostbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno ok
The @code{gethostbyname} function returns information about the host
named @var{name}. If the lookup fails, it returns a null pointer.
@end deftypefun
@@ -1218,6 +1389,16 @@ named @var{name}. If the lookup fails, it returns a null pointer.
@comment netdb.h
@comment IPv6 Basic API
@deftypefun {struct hostent *} gethostbyname2 (const char *@var{name}, int @var{af})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname2} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname2 @mtasurace:hostbyname2 @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c gethostbyname2_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno dup ok
The @code{gethostbyname2} function is like @code{gethostbyname}, but
allows the caller to specify the desired address family (e.g.@:
@code{AF_INET} or @code{AF_INET6}) of the result.
@@ -1226,6 +1407,15 @@ allows the caller to specify the desired address family (e.g.@:
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostbyaddr (const void *@var{addr}, socklen_t @var{length}, int @var{format})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyaddr} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyaddr @mtasurace:hostbyaddr @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c gethostbyaddr_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno dup ok
The @code{gethostbyaddr} function returns information about the host
with Internet address @var{addr}. The parameter @var{addr} is not
really a pointer to char - it can be a pointer to an IPv4 or an IPv6
@@ -1282,6 +1472,76 @@ used in this context.
@comment netdb.h
@comment GNU
@deftypefun int gethostbyname_r (const char *restrict @var{name}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nscd_gethostbyname_r @mtsenv @ascuheap @acsfd @acsmem
+@c nscd_gethst_r @mtsenv @ascuheap @acsfd @acsmem
+@c getenv dup @mtsenv
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c memcpy dup ok
+@c nscd_open_socket dup @acsfd
+@c readvall dup ok
+@c readall dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c res_hconf.c:do_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c memset dup ok
+@c getenv dup @mtsenv
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no concurrent uses]
+@c fgets_unlocked dup ok [no concurrent uses]
+@c strchrnul dup ok
+@c res_hconf.c:parse_line @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c skip_ws dup @mtslocale
+@c skip_string dup @mtslocale
+@c strncasecmp dup @mtslocale
+@c strlen dup ok
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c arg_trimdomain_list dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c arg_spoof dup @mtslocale
+@c arg_bool dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c isspace dup @mtslocale
+@c fclose dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c arg_spoof @mtslocale
+@c skip_string @mtslocale
+@c isspace dup @mtslocale
+@c strncasecmp dup @mtslocale
+@c arg_bool @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c strncasecmp dup @mtslocale
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c arg_trimdomain_list @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c skip_string dup @mtslocale
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c strndup dup @ascuheap @acsmem
+@c skip_ws @mtslocale
+@c isspace dup @mtslocale
+@c nss_hosts_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyname_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs @asulock @ascuheap @aculock @acsmem @acsfd
+@c socket dup @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c ifreq @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c if_nextreq dup ok
+@c ioctl dup ok
+@c realloc dup @ascuheap @acsmem
+@c if_freereq dup @acsmem
+@c libc_lock_unlock dup @aculock
+@c close dup @acsfd
The @code{gethostbyname_r} function returns information about the host
named @var{name}. The caller must pass a pointer to an object of type
@code{struct hostent} in the @var{result_buf} parameter. In addition
@@ -1337,6 +1597,17 @@ gethostname (char *host)
@comment netdb.h
@comment GNU
@deftypefun int gethostbyname2_r (const char *@var{name}, int @var{af}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname2_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nscd_gethostbyname2_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyname2_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
The @code{gethostbyname2_r} function is like @code{gethostbyname_r}, but
allows the caller to specify the desired address family (e.g.@:
@code{AF_INET} or @code{AF_INET6}) for the result.
@@ -1345,6 +1616,21 @@ allows the caller to specify the desired address family (e.g.@:
@comment netdb.h
@comment GNU
@deftypefun int gethostbyaddr_r (const void *@var{addr}, socklen_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyaddr_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c memcmp dup ok
+@c nscd_gethostbyaddr_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyaddr_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
+@c res_hconf_trim_domains @mtslocale
+@c res_hconf_trim_domain @mtslocale
+@c strlen dup ok
+@c strcasecmp dup @mtslocale
The @code{gethostbyaddr_r} function returns information about the host
with Internet address @var{addr}. The parameter @var{addr} is not
really a pointer to char - it can be a pointer to an IPv4 or an IPv6
@@ -1367,6 +1653,18 @@ when using these functions because they are not reentrant.
@comment netdb.h
@comment BSD
@deftypefun void sethostent (int @var{stayopen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c sethostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_setent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c set_h_errno dup ok
+@c setup(nss_hosts_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock dup @aculock
This function opens the hosts database to begin scanning it. You can
then call @code{gethostent} to read the entries.
@@ -1382,6 +1680,27 @@ reopening the database for each call.
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtasurace{:hostentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c gethostent @mtasurace:hostent @mtasurace:hostentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(gethostent_r) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = gethostent_r dup @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c gethostent_r @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_hosts_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:hostent @ascuplugin
+@c libc_lock_unlock dup @aculock
+
This function returns the next entry in the hosts database. It
returns a null pointer if there are no more entries.
@end deftypefun
@@ -1389,6 +1708,15 @@ returns a null pointer if there are no more entries.
@comment netdb.h
@comment BSD
@deftypefun void endhostent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endhostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function closes the hosts database.
@end deftypefun
@@ -1488,6 +1816,34 @@ information if you need to save it across calls.
@comment netdb.h
@comment BSD
@deftypefun {struct servent *} getservbyname (const char *@var{name}, const char *@var{proto})
+@safety{@prelim{}@mtunsafe{@mtasurace{:servbyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getservbyname =~ getpwuid @mtasurace:servbyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getservbyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getservbyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getservbyname_r @ascuheap @acsfd @acsmem
+@c nscd_getserv_r @ascuheap @acsfd @acsmem
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c memcpy dup ok
+@c nscd_cache_search dup ok
+@c nscd_open_socket dup @acsfd
+@c readvall dup ok
+@c readall dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getservbyname_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getservbyname} function returns information about the
service named @var{name} using protocol @var{proto}. If it can't find
such a service, it returns a null pointer.
@@ -1499,6 +1855,21 @@ use it to determine which port they should listen on (@pxref{Listening}).
@comment netdb.h
@comment BSD
@deftypefun {struct servent *} getservbyport (int @var{port}, const char *@var{proto})
+@safety{@prelim{}@mtunsafe{@mtasurace{:servbyport} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getservbyport =~ getservbyname @mtasurace:servbyport @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getservbyport_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getservbyport_r =~ getservbyname_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getservbyport_r @ascuheap @acsfd @acsmem
+@c nscd_getserv_r dup @ascuheap @acsfd @acsmem
+@c nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getservbyport_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getservbyport} function returns information about the
service at port @var{port} using protocol @var{proto}. If it can't
find such a service, it returns a null pointer.
@@ -1512,6 +1883,16 @@ functions because they are not reentrant.
@comment netdb.h
@comment BSD
@deftypefun void setservent (int @var{stayopen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_setent(nss_services_lookup2) @mtasurace:servenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_services_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_services_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:servent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock dup @aculock
This function opens the services database to begin scanning it.
If the @var{stayopen} argument is nonzero, this sets a flag so that
@@ -1524,6 +1905,25 @@ reopening the database for each call.
@comment netdb.h
@comment BSD
@deftypefun {struct servent *} getservent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtasurace{:serventbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getservent @mtasurace:servent @mtasurace:serventbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(getservent_r) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = getservent_r dup @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getservent_r @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:servent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:servent @ascuplugin
+@c libc_lock_unlock dup @aculock
This function returns the next entry in the services database. If
there are no more entries, it returns a null pointer.
@end deftypefun
@@ -1531,6 +1931,14 @@ there are no more entries, it returns a null pointer.
@comment netdb.h
@comment BSD
@deftypefun void endservent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:servent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function closes the services database.
@end deftypefun
@@ -1576,6 +1984,11 @@ to @code{uint32_t}.) These functions are declared in
@comment netinet/in.h
@comment BSD
@deftypefun {uint16_t} htons (uint16_t @var{hostshort})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c htons ok
+@c bswap_16 ok
+@c bswap_constant_16 ok
+
This function converts the @code{uint16_t} integer @var{hostshort} from
host byte order to network byte order.
@end deftypefun
@@ -1583,6 +1996,8 @@ host byte order to network byte order.
@comment netinet/in.h
@comment BSD
@deftypefun {uint16_t} ntohs (uint16_t @var{netshort})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Alias to htons.
This function converts the @code{uint16_t} integer @var{netshort} from
network byte order to host byte order.
@end deftypefun
@@ -1590,6 +2005,9 @@ network byte order to host byte order.
@comment netinet/in.h
@comment BSD
@deftypefun {uint32_t} htonl (uint32_t @var{hostlong})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c htonl ok
+@c bswap_32 dup ok
This function converts the @code{uint32_t} integer @var{hostlong} from
host byte order to network byte order.
@@ -1599,6 +2017,8 @@ This is used for IPv4 Internet addresses.
@comment netinet/in.h
@comment BSD
@deftypefun {uint32_t} ntohl (uint32_t @var{netlong})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Alias to htonl.
This function converts the @code{uint32_t} integer @var{netlong} from
network byte order to host byte order.
@@ -1663,6 +2083,20 @@ information if you need to save it across calls.
@comment netdb.h
@comment BSD
@deftypefun {struct protoent *} getprotobyname (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:protobyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getprotobyname =~ getpwuid @mtasurace:protobyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getprotobyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getprotobyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c no nscd support
+@c nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getprotobyname_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getprotobyname} function returns information about the
network protocol named @var{name}. If there is no such protocol, it
returns a null pointer.
@@ -1671,6 +2105,20 @@ returns a null pointer.
@comment netdb.h
@comment BSD
@deftypefun {struct protoent *} getprotobynumber (int @var{protocol})
+@safety{@prelim{}@mtunsafe{@mtasurace{:protobynumber} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getprotobynumber =~ getpwuid @mtasurace:protobynumber @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getprotobynumber_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getprotobynumber_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c no nscd support
+@c nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getprotobynumber_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getprotobynumber} function returns information about the
network protocol with number @var{protocol}. If there is no such
protocol, it returns a null pointer.
@@ -1683,6 +2131,16 @@ Be careful when using these functions because they are not reentrant.
@comment netdb.h
@comment BSD
@deftypefun void setprotoent (int @var{stayopen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_setent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_protocols_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_protocols_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:protoent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock dup @aculock
This function opens the protocols database to begin scanning it.
If the @var{stayopen} argument is nonzero, this sets a flag so that
@@ -1695,6 +2153,25 @@ reopening the database for each call.
@comment netdb.h
@comment BSD
@deftypefun {struct protoent *} getprotoent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtasurace{:protoentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getprotoent @mtasurace:protoent @mtasurace:protoentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(getprotoent_r) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = getprotoent_r dup @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getprotoent_r @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:servent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:protoent @ascuplugin
+@c libc_lock_unlock dup @aculock
This function returns the next entry in the protocols database. It
returns a null pointer if there are no more entries.
@end deftypefun
@@ -1702,6 +2179,14 @@ returns a null pointer if there are no more entries.
@comment netdb.h
@comment BSD
@deftypefun void endprotoent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:protoent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function closes the protocols database.
@end deftypefun
@@ -1771,6 +2256,7 @@ declared in @file{sys/socket.h}.
@comment sys/socket.h
@comment BSD
@deftypefun int socket (int @var{namespace}, int @var{style}, int @var{protocol})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function creates a socket and specifies communication style
@var{style}, which should be one of the socket styles listed in
@ref{Communication Styles}. The @var{namespace} argument specifies
@@ -1833,6 +2319,7 @@ connection by calling @code{shutdown}, which is declared in
@comment sys/socket.h
@comment BSD
@deftypefun int shutdown (int @var{socket}, int @var{how})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{shutdown} function shuts down the connection of socket
@var{socket}. The argument @var{how} specifies what action to
perform:
@@ -1884,6 +2371,7 @@ FIFOs}).
@comment sys/socket.h
@comment BSD
@deftypefun int socketpair (int @var{namespace}, int @var{style}, int @var{protocol}, int @var{filedes}@t{[2]})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function creates a socket pair, returning the file descriptors in
@code{@var{filedes}[0]} and @code{@var{filedes}[1]}. The socket pair
is a full-duplex communications channel, so that both reading and writing
@@ -1977,6 +2465,7 @@ program must do with the @code{connect} function, which is declared in
@comment sys/socket.h
@comment BSD
@deftypefun int connect (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{connect} function initiates a connection from the socket
with file descriptor @var{socket} to the socket whose address is
specified by the @var{addr} and @var{length} arguments. (This socket
@@ -2076,6 +2565,7 @@ access to connect to the socket.
@comment sys/socket.h
@comment BSD
@deftypefun int listen (int @var{socket}, int @var{n})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
The @code{listen} function enables the socket @var{socket} to accept
connections, thus making it a server socket.
@@ -2128,6 +2618,7 @@ queue.
@comment sys/socket.h
@comment BSD
@deftypefun int accept (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length_ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
This function is used to accept a connection request on the server
socket @var{socket}.
@@ -2186,6 +2677,7 @@ connectionless communication styles.
@comment sys/socket.h
@comment BSD
@deftypefun int getpeername (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getpeername} function returns the address of the socket that
@var{socket} is connected to; it stores the address in the memory space
specified by @var{addr} and @var{length-ptr}. It stores the length of
@@ -2254,6 +2746,7 @@ you get a @code{SIGPIPE} signal for any use of @code{send} or
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t send (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{send} function is like @code{write}, but with the additional
flags @var{flags}. The possible values of @var{flags} are described
in @ref{Socket Data Options}.
@@ -2321,6 +2814,7 @@ Primitives}.
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t recv (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{recv} function is like @code{read}, but with the additional
flags @var{flags}. The possible values of @var{flags} are described
in @ref{Socket Data Options}.
@@ -2649,6 +3143,7 @@ more information about the @code{connect} function.
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t sendto (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{sendto} function transmits the data in the @var{buffer}
through the socket @var{socket} to the destination address specified
by the @var{addr} and @var{length} arguments. The @var{size} argument
@@ -2684,6 +3179,7 @@ also tells you where it was sent from. This function is declared in
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{recvfrom} function reads one packet from the socket
@var{socket} into the buffer @var{buffer}. The @var{size} argument
specifies the maximum number of bytes to be read.
@@ -2731,6 +3227,7 @@ you don't want to specify @var{flags} (@pxref{I/O Primitives}).
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is defined as a cancellation point in multi-threaded
programs, so one has to be prepared for this and make sure that
@@ -2742,6 +3239,7 @@ whatever) are freed even if the thread is cancel.
@comment sys/socket.h
@comment BSD
@deftypefun ssize_t recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is defined as a cancellation point in multi-threaded
programs, so one has to be prepared for this and make sure that
@@ -2929,6 +3427,7 @@ They are declared in @file{sys/socket.h}.
@comment sys/socket.h
@comment BSD
@deftypefun int getsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t *@var{optlen-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getsockopt} function gets information about the value of
option @var{optname} at level @var{level} for socket @var{socket}.
@@ -2959,6 +3458,7 @@ The @var{optname} doesn't make sense for the given @var{level}.
@comment sys/socket.h
@comment BSD
@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, const void *@var{optval}, socklen_t @var{optlen})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is used to set the socket option @var{optname} at level
@var{level} for socket @var{socket}. The value of the option is passed
in the buffer @var{optval} of size @var{optlen}.
@@ -3155,6 +3655,21 @@ copy the information if you need to save it.
@comment netdb.h
@comment BSD
@deftypefun {struct netent *} getnetbyname (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getnetbyname =~ getpwuid @mtasurace:netbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getnetbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getnetbyname_r =~ getpwuid_r @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c no nscd support
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getnetbyname_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getnetbyname} function returns information about the network
named @var{name}. It returns a null pointer if there is no such
network.
@@ -3163,6 +3678,20 @@ network.
@comment netdb.h
@comment BSD
@deftypefun {struct netent *} getnetbyaddr (uint32_t @var{net}, int @var{type})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netbyaddr} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getnetbyaddr =~ getpwuid @mtasurace:netbyaddr @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getnetbyaddr_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getnetbyaddr_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c no nscd support
+@c nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getnetbyaddr_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getnetbyaddr} function returns information about the network
of type @var{type} with number @var{net}. You should specify a value of
@code{AF_INET} for the @var{type} argument for Internet networks.
@@ -3178,6 +3707,17 @@ functions because they are not reentrant.
@comment netdb.h
@comment BSD
@deftypefun void setnetent (int @var{stayopen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_setent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_networks_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_networks_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:netent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock dup @aculock
This function opens and rewinds the networks database.
If the @var{stayopen} argument is nonzero, this sets a flag so that
@@ -3190,6 +3730,26 @@ reopening the database for each call.
@comment netdb.h
@comment BSD
@deftypefun {struct netent *} getnetent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtasurace{:netentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getnetent @mtasurace:netent @mtasurace:netentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(getnetent_r) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = getnetent_r dup @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c getnetent_r @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:servent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:netent @ascuplugin
+@c libc_lock_unlock dup @aculock
This function returns the next entry in the networks database. It
returns a null pointer if there are no more entries.
@end deftypefun
@@ -3197,5 +3757,14 @@ returns a null pointer if there are no more entries.
@comment netdb.h
@comment BSD
@deftypefun void endnetent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:netent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function closes the networks database.
@end deftypefun
diff --git a/libc/manual/startup.texi b/libc/manual/startup.texi
index edd1de47b..a5d2d2f5e 100644
--- a/libc/manual/startup.texi
+++ b/libc/manual/startup.texi
@@ -41,7 +41,7 @@ see the event from the execor's point of view, see @ref{Executing a File}.
* Program Termination:: Telling the system you're done; return status
@end menu
-@node Program Arguments
+@node Program Arguments, Environment Variables, , Program Basics
@section Program Arguments
@cindex program arguments
@cindex command line arguments
@@ -221,6 +221,11 @@ available.
@comment stdlib.h
@deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c getsubopt ok
+@c strchrnul dup ok
+@c memchr dup ok
+@c strncmp dup ok
The @var{optionp} parameter must be a pointer to a variable containing
the address of the string to process. When the function returns the
@@ -258,7 +263,7 @@ example of the use of @code{getsubopt}:
@end smallexample
-@node Environment Variables
+@node Environment Variables, Auxiliary Vector, Program Arguments, Program Basics
@section Environment Variables
@cindex environment variable
@@ -322,6 +327,8 @@ functions can be safely used in multi-threaded programs.
@comment stdlib.h
@comment ISO
@deftypefun {char *} getenv (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
+@c Unguarded access to __environ.
This function returns a string that is the value of the environment
variable @var{name}. You must not modify this string. In some non-Unix
systems not using @theglibc{}, it might be overwritten by subsequent
@@ -333,6 +340,8 @@ pointer.
@comment stdlib.h
@comment GNU
@deftypefun {char *} secure_getenv (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
+@c Calls getenv unless secure mode is enabled.
This function is similar to @code{getenv}, but it returns a null
pointer if the environment is untrusted. This happens when the
program file has SUID or SGID bits set. General-purpose libraries
@@ -346,6 +355,13 @@ This function is a GNU extension.
@comment stdlib.h
@comment SVID
@deftypefun int putenv (char *@var{string})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c putenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c strchr dup ok
+@c strndup dup @ascuheap @acsmem
+@c add_to_environ dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c free dup @ascuheap @acsmem
+@c unsetenv dup @mtasuconst:@mtsenv @asulock @aculock
The @code{putenv} function adds or removes definitions from the environment.
If the @var{string} is of the form @samp{@var{name}=@var{value}}, the
definition is added to the environment. Otherwise, the @var{string} is
@@ -358,8 +374,8 @@ value is nonzero and @code{errno} is set to indicate the error.
The difference to the @code{setenv} function is that the exact string
given as the parameter @var{string} is put into the environment. If the
user should change the string after the @code{putenv} call this will
-reflect in automatically in the environment. This also requires that
-@var{string} is no automatic variable which scope is left before the
+reflect automatically in the environment. This also requires that
+@var{string} not be an automatic variable whose scope is left before the
variable is removed from the environment. The same applies of course to
dynamically allocated variables which are freed later.
@@ -372,6 +388,24 @@ available in old SVID libraries you should define either
@comment stdlib.h
@comment BSD
@deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c setenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c add_to_environ @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c strlen dup ok
+@c libc_lock_lock @asulock @aculock
+@c strncmp dup ok
+@c realloc dup @ascuheap @acsmem
+@c libc_lock_unlock @aculock
+@c malloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c mempcpy dup ok
+@c memcpy dup ok
+@c KNOWN_VALUE ok
+@c tfind(strcmp) [no @mtsrace guarded access]
+@c strcmp dup ok
+@c STORE_VALUE @ascuheap @acucorrupt @acsmem
+@c tsearch(strcmp) @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt guarded access makes for mtsafe and @asulock]
+@c strcmp dup ok
The @code{setenv} function can be used to add a new definition to the
environment. The entry with the name @var{name} is replaced by the
value @samp{@var{name}=@var{value}}. Please note that this is also true
@@ -395,6 +429,13 @@ the Unix standard.
@comment stdlib.h
@comment BSD
@deftypefun int unsetenv (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c unsetenv @mtasuconst:@mtsenv @asulock @aculock
+@c strchr dup ok
+@c strlen dup ok
+@c libc_lock_lock @asulock @aculock
+@c strncmp dup ok
+@c libc_lock_unlock @aculock
Using this function one can remove an entry completely from the
environment. If the environment contains an entry with the key
@var{name} this whole entry is removed. A call to this function is
@@ -418,6 +459,11 @@ to enable writing standard compliant Fortran environments.
@comment stdlib.h
@comment GNU
@deftypefun int clearenv (void)
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+@c clearenv @mtasuconst:@mtsenv @ascuheap @asulock @aculock @acsmem
+@c libc_lock_lock @asulock @aculock
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock @aculock
The @code{clearenv} function removes all entries from the environment.
Using @code{putenv} and @code{setenv} new entries can be added again
later.
@@ -622,6 +668,8 @@ basis there may be information that is not available any other way.
@subsection Definition of @code{getauxval}
@comment sys/auxv.h
@deftypefun {unsigned long int} getauxval (unsigned long int @var{type})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Reads from hwcap or iterates over constant auxv.
This function is used to inquire about the entries in the auxiliary
vector. The @var{type} argument should be one of the @samp{AT_} symbols
defined in @file{elf.h}. If a matching entry is found, the value is
@@ -678,6 +726,7 @@ anyway.
@comment unistd.h
@comment ???
@deftypefun {long int} syscall (long int @var{sysno}, @dots{})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{syscall} performs a generic system call.
@@ -783,6 +832,10 @@ the argument to @code{exit}.
@comment stdlib.h
@comment ISO
@deftypefun void exit (int @var{status})
+@safety{@prelim{}@mtunsafe{@mtasurace{:exit}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c Access to the atexit/on_exit list, the libc_atexit hook and tls dtors
+@c is not guarded. Streams must be flushed, and that triggers the usual
+@c AS and AC issues with streams.
The @code{exit} function tells the system that the program is done, which
causes it to terminate the process.
@@ -899,6 +952,15 @@ using @code{atexit} or @code{on_exit}.
@comment stdlib.h
@comment ISO
@deftypefun int atexit (void (*@var{function}) (void))
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+@c atexit @ascuheap @asulock @aculock @acsmem
+@c cxa_atexit @ascuheap @asulock @aculock @acsmem
+@c __internal_atexit @ascuheap @asulock @aculock @acsmem
+@c __new_exitfn @ascuheap @asulock @aculock @acsmem
+@c __libc_lock_lock @asulock @aculock
+@c calloc dup @ascuheap @acsmem
+@c __libc_lock_unlock @aculock
+@c atomic_write_barrier dup ok
The @code{atexit} function registers the function @var{function} to be
called at normal program termination. The @var{function} is called with
no arguments.
@@ -910,6 +972,10 @@ the function cannot be registered.
@comment stdlib.h
@comment SunOS
@deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+@c on_exit @ascuheap @asulock @aculock @acsmem
+@c new_exitfn dup @ascuheap @asulock @aculock @acsmem
+@c atomic_write_barrier dup ok
This function is a somewhat more powerful variant of @code{atexit}. It
accepts two arguments, a function @var{function} and an arbitrary
pointer @var{arg}. At normal program termination, the @var{function} is
@@ -941,6 +1007,10 @@ for this function is in @file{stdlib.h}.
@comment stdlib.h
@comment ISO
@deftypefun void abort (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+@c The implementation takes a recursive lock and attempts to support
+@c calls from signal handlers, but if we're in the middle of flushing or
+@c using streams, we may encounter them in inconsistent states.
The @code{abort} function causes abnormal program termination. This
does not execute cleanup functions registered with @code{atexit} or
@code{on_exit}.
@@ -968,6 +1038,9 @@ by @code{exit}. It is declared in the header file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun void _exit (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall (exit_group or exit); calls __task_terminate on hurd,
+@c and abort in the generic posix implementation.
The @code{_exit} function is the primitive for causing a process to
terminate with status @var{status}. Calling this function does not
execute cleanup functions registered with @code{atexit} or
@@ -977,6 +1050,8 @@ execute cleanup functions registered with @code{atexit} or
@comment stdlib.h
@comment ISO
@deftypefun void _Exit (int @var{status})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Alias for _exit.
The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}.
The @w{ISO C} committee members were not sure whether the definitions of
@code{_exit} and @code{_Exit} were compatible so they have not used the
diff --git a/libc/manual/stdio.texi b/libc/manual/stdio.texi
index 7957a2adf..1161a9a90 100644
--- a/libc/manual/stdio.texi
+++ b/libc/manual/stdio.texi
@@ -148,6 +148,8 @@ Everything described in this section is declared in the header file
@comment stdio.h
@comment ISO
@deftypefun {FILE *} fopen (const char *@var{filename}, const char *@var{opentype})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
+@c fopen may leak the list lock if cancelled within _IO_link_in.
The @code{fopen} function opens a stream for I/O to the file
@var{filename}, and returns a pointer to the stream.
@@ -265,6 +267,7 @@ Locks}.
@comment stdio.h
@comment Unix98
@deftypefun {FILE *} fopen64 (const char *@var{filename}, const char *@var{opentype})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
This function is similar to @code{fopen} but the stream it returns a
pointer for is opened using @code{open64}. Therefore this stream can be
used even on files larger than @math{2^31} bytes on 32 bit machines.
@@ -294,6 +297,16 @@ resource limit; @pxref{Limits on Resources}.
@comment stdio.h
@comment ISO
@deftypefun {FILE *} freopen (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
+@c Like most I/O operations, this one is guarded by a recursive lock,
+@c released even upon cancellation, but cancellation may leak file
+@c descriptors and leave the stream in an inconsistent state (e.g.,
+@c still bound to the closed descriptor). Also, if the stream is
+@c part-way through a significant update (say running freopen) when a
+@c signal handler calls freopen again on the same stream, the result is
+@c likely to be an inconsistent stream, and the possibility of closing
+@c twice file descriptor number that the stream used to use, the second
+@c time when it might have already been reused by another thread.
This function is like a combination of @code{fclose} and @code{fopen}.
It first closes the stream referred to by @var{stream}, ignoring any
errors that are detected in the process. (Because errors are ignored,
@@ -320,6 +333,7 @@ interface replaces transparently the old interface.
@comment stdio.h
@comment Unix98
@deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
This function is similar to @code{freopen}. The only difference is that
on 32 bit machine the stream returned is able to read beyond the
@math{2^31} bytes limits imposed by the normal interface. It should be
@@ -341,6 +355,7 @@ descriptor and these functions are also available in @theglibc{}.
@comment stdio_ext.h
@comment GNU
@deftypefun int __freadable (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{__freadable} function determines whether the stream
@var{stream} was opened to allow reading. In this case the return value
is nonzero. For write-only streams the function returns zero.
@@ -351,6 +366,7 @@ This function is declared in @file{stdio_ext.h}.
@comment stdio_ext.h
@comment GNU
@deftypefun int __fwritable (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{__fwritable} function determines whether the stream
@var{stream} was opened to allow writing. In this case the return value
is nonzero. For read-only streams the function returns zero.
@@ -364,6 +380,7 @@ They provide even finer-grained information.
@comment stdio_ext.h
@comment GNU
@deftypefun int __freading (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{__freading} function determines whether the stream
@var{stream} was last read from or whether it is opened read-only. In
this case the return value is nonzero, otherwise it is zero.
@@ -377,6 +394,7 @@ This function is declared in @file{stdio_ext.h}.
@comment stdio_ext.h
@comment GNU
@deftypefun int __fwriting (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{__fwriting} function determines whether the stream
@var{stream} was last written to or whether it is opened write-only. In
this case the return value is nonzero, otherwise it is zero.
@@ -396,6 +414,21 @@ cannot perform any additional operations on it.
@comment stdio.h
@comment ISO
@deftypefun int fclose (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c After fclose, it is undefined behavior to use the stream it points
+@c to. Therefore, one must only call fclose when the stream is
+@c otherwise unused. Concurrent uses started before will complete
+@c successfully because of the lock, which makes it MT-Safe. Calling it
+@c from a signal handler is perfectly safe if the stream is known to be
+@c no longer used, which is a precondition for fclose to be safe in the
+@c first place; since this is no further requirement, fclose is safe for
+@c use in async signals too. After calling fclose, you can no longer
+@c use the stream, not even to fclose it again, so its memory and file
+@c descriptor may leak if fclose is canceled before @c releasing them.
+@c That the stream must be unused and it becomes unused after the call
+@c is what would enable fclose to be AS- and AC-Safe while freopen
+@c isn't. However, because of the possibility of leaving __gconv_lock
+@c taken upon cancellation, AC-Safety is lost.
This function causes @var{stream} to be closed and the connection to
the corresponding file to be broken. Any buffered output is written
and any buffered input is discarded. The @code{fclose} function returns
@@ -418,6 +451,12 @@ another function.
@comment stdio.h
@comment GNU
@deftypefun int fcloseall (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:streams}}@asunsafe{}@acsafe{}}
+@c Like fclose, using any previously-opened streams after fcloseall is
+@c undefined. However, the implementation of fcloseall isn't equivalent
+@c to calling fclose for all streams: it just flushes and unbuffers all
+@c streams, without any locking. It's the flushing without locking that
+@c makes it unsafe.
This function causes all open streams of the process to be closed and
the connection to corresponding files to be broken. All buffered data
is written and any buffered input is discarded. The @code{fcloseall}
@@ -474,6 +513,9 @@ perform the stream locking in the application code.
@comment stdio.h
@comment POSIX
@deftypefun void flockfile (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+@c There's no way to tell whether the lock was acquired before or after
+@c cancellation so as to unlock only when appropriate.
The @code{flockfile} function acquires the internal locking object
associated with the stream @var{stream}. This ensures that no other
thread can explicitly through @code{flockfile}/@code{ftrylockfile} or
@@ -485,6 +527,7 @@ thread will block until the lock is acquired. An explicit call to
@comment stdio.h
@comment POSIX
@deftypefun int ftrylockfile (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
The @code{ftrylockfile} function tries to acquire the internal locking
object associated with the stream @var{stream} just like
@code{flockfile}. But unlike @code{flockfile} this function does not
@@ -496,6 +539,7 @@ another thread.
@comment stdio.h
@comment POSIX
@deftypefun void funlockfile (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
The @code{funlockfile} function releases the internal locking object of
the stream @var{stream}. The stream must have been locked before by a
call to @code{flockfile} or a successful call of @code{ftrylockfile}.
@@ -621,6 +665,15 @@ was introduced in Solaris and is available in @theglibc{} as well.
@comment stdio_ext.h
@comment GNU
@deftypefun int __fsetlocking (FILE *@var{stream}, int @var{type})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asulock{}}@acsafe{}}
+@c Changing the implicit-locking status of a stream while it's in use by
+@c another thread may cause a lock to be implicitly acquired and not
+@c released, or vice-versa. This function should probably hold the lock
+@c while changing this setting, to make sure we don't change it while
+@c there are any concurrent uses. Meanwhile, callers should acquire the
+@c lock themselves to be safe, and even concurrent uses with external
+@c locking will be fine, as long as functions that require external
+@c locking are not called without holding locks.
The @code{__fsetlocking} function can be used to select whether the
stream operations will implicitly acquire the locking object of the
@@ -725,6 +778,10 @@ will simply be strange or the application will simply crash. The
@comment wchar.h
@comment ISO
@deftypefun int fwide (FILE *@var{stream}, int @var{mode})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{}}}
+@c Querying is always safe, but changing the stream when it's in use
+@c upthread may be problematic. Like most lock-acquiring functions,
+@c this one may leak the lock if canceled.
The @code{fwide} function can be used to set and query the state of the
orientation of the stream @var{stream}. If the @var{mode} parameter has
@@ -811,6 +868,16 @@ These narrow streams functions are declared in the header file
@comment stdio.h
@comment ISO
@deftypefun int fputc (int @var{c}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c If the stream is in use when interrupted by a signal, the recursive
+@c lock won't help ensure the stream is consistent; indeed, if fputc
+@c gets a signal precisely before the post-incremented _IO_write_ptr
+@c value is stored, we may overwrite the interrupted write. Conversely,
+@c depending on compiler optimizations, the incremented _IO_write_ptr
+@c may be stored before the character is stored in the buffer,
+@c corrupting the stream if async cancel hits between the two stores.
+@c There may be other reasons for AS- and AC-unsafety in the overflow
+@c cases.
The @code{fputc} function converts the character @var{c} to type
@code{unsigned char}, and writes it to the stream @var{stream}.
@code{EOF} is returned if a write error occurs; otherwise the
@@ -820,6 +887,7 @@ character @var{c} is returned.
@comment wchar.h
@comment ISO
@deftypefun wint_t fputwc (wchar_t @var{wc}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
The @code{fputwc} function writes the wide character @var{wc} to the
stream @var{stream}. @code{WEOF} is returned if a write error occurs;
otherwise the character @var{wc} is returned.
@@ -828,6 +896,10 @@ otherwise the character @var{wc} is returned.
@comment stdio.h
@comment POSIX
@deftypefun int fputc_unlocked (int @var{c}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c The unlocked functions can't possibly satisfy the MT-Safety
+@c requirements on their own, because they require external locking for
+@c safety.
The @code{fputc_unlocked} function is equivalent to the @code{fputc}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -835,6 +907,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment POSIX
@deftypefun wint_t fputwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fputwc_unlocked} function is equivalent to the @code{fputwc}
function except that it does not implicitly lock the stream.
@@ -844,6 +917,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int putc (int @var{c}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
This is just like @code{fputc}, except that most systems implement it as
a macro, making it faster. One consequence is that it may evaluate the
@var{stream} argument more than once, which is an exception to the
@@ -854,6 +928,7 @@ use for writing a single character.
@comment wchar.h
@comment ISO
@deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
This is just like @code{fputwc}, except that it can be implement as
a macro, making it faster. One consequence is that it may evaluate the
@var{stream} argument more than once, which is an exception to the
@@ -864,6 +939,7 @@ use for writing a single wide character.
@comment stdio.h
@comment POSIX
@deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{putc_unlocked} function is equivalent to the @code{putc}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -871,6 +947,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment GNU
@deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{putwc_unlocked} function is equivalent to the @code{putwc}
function except that it does not implicitly lock the stream.
@@ -880,6 +957,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int putchar (int @var{c})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
The @code{putchar} function is equivalent to @code{putc} with
@code{stdout} as the value of the @var{stream} argument.
@end deftypefun
@@ -887,6 +965,7 @@ The @code{putchar} function is equivalent to @code{putc} with
@comment wchar.h
@comment ISO
@deftypefun wint_t putwchar (wchar_t @var{wc})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
The @code{putwchar} function is equivalent to @code{putwc} with
@code{stdout} as the value of the @var{stream} argument.
@end deftypefun
@@ -894,6 +973,7 @@ The @code{putwchar} function is equivalent to @code{putwc} with
@comment stdio.h
@comment POSIX
@deftypefun int putchar_unlocked (int @var{c})
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{putchar_unlocked} function is equivalent to the @code{putchar}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -901,6 +981,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment GNU
@deftypefun wint_t putwchar_unlocked (wchar_t @var{wc})
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{putwchar_unlocked} function is equivalent to the @code{putwchar}
function except that it does not implicitly lock the stream.
@@ -910,6 +991,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int fputs (const char *@var{s}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
The function @code{fputs} writes the string @var{s} to the stream
@var{stream}. The terminating null character is not written.
This function does @emph{not} add a newline character, either.
@@ -933,6 +1015,7 @@ outputs the text @samp{Are you hungry?} followed by a newline.
@comment wchar.h
@comment ISO
@deftypefun int fputws (const wchar_t *@var{ws}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
The function @code{fputws} writes the wide character string @var{ws} to
the stream @var{stream}. The terminating null character is not written.
This function does @emph{not} add a newline character, either. It
@@ -945,6 +1028,7 @@ a non-negative value.
@comment stdio.h
@comment GNU
@deftypefun int fputs_unlocked (const char *@var{s}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fputs_unlocked} function is equivalent to the @code{fputs}
function except that it does not implicitly lock the stream.
@@ -954,6 +1038,7 @@ This function is a GNU extension.
@comment wchar.h
@comment GNU
@deftypefun int fputws_unlocked (const wchar_t *@var{ws}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fputws_unlocked} function is equivalent to the @code{fputws}
function except that it does not implicitly lock the stream.
@@ -963,6 +1048,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int puts (const char *@var{s})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{puts} function writes the string @var{s} to the stream
@code{stdout} followed by a newline. The terminating null character of
the string is not written. (Note that @code{fputs} does @emph{not}
@@ -982,6 +1068,7 @@ outputs the text @samp{This is a message.} followed by a newline.
@comment stdio.h
@comment SVID
@deftypefun int putw (int @var{w}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function writes the word @var{w} (that is, an @code{int}) to
@var{stream}. It is provided for compatibility with SVID, but we
recommend you use @code{fwrite} instead (@pxref{Block Input/Output}).
@@ -1014,6 +1101,11 @@ it will fit in a @samp{char} variable without loss of information.
@comment stdio.h
@comment ISO
@deftypefun int fgetc (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+@c Same caveats as fputc, but instead of losing a write in case of async
+@c signals, we may read the same character more than once, and the
+@c stream may be left in odd states due to cancellation in the underflow
+@c cases.
This function reads the next character as an @code{unsigned char} from
the stream @var{stream} and returns its value, converted to an
@code{int}. If an end-of-file condition or read error occurs,
@@ -1023,6 +1115,7 @@ the stream @var{stream} and returns its value, converted to an
@comment wchar.h
@comment ISO
@deftypefun wint_t fgetwc (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function reads the next wide character from the stream @var{stream}
and returns its value. If an end-of-file condition or read error
occurs, @code{WEOF} is returned instead.
@@ -1031,6 +1124,7 @@ occurs, @code{WEOF} is returned instead.
@comment stdio.h
@comment POSIX
@deftypefun int fgetc_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fgetc_unlocked} function is equivalent to the @code{fgetc}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -1038,6 +1132,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment GNU
@deftypefun wint_t fgetwc_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fgetwc_unlocked} function is equivalent to the @code{fgetwc}
function except that it does not implicitly lock the stream.
@@ -1047,6 +1142,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int getc (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This is just like @code{fgetc}, except that it is permissible (and
typical) for it to be implemented as a macro that evaluates the
@var{stream} argument more than once. @code{getc} is often highly
@@ -1057,6 +1153,7 @@ character.
@comment wchar.h
@comment ISO
@deftypefun wint_t getwc (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This is just like @code{fgetwc}, except that it is permissible for it to
be implemented as a macro that evaluates the @var{stream} argument more
than once. @code{getwc} can be highly optimized, so it is usually the
@@ -1066,6 +1163,7 @@ best function to use to read a single wide character.
@comment stdio.h
@comment POSIX
@deftypefun int getc_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{getc_unlocked} function is equivalent to the @code{getc}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -1073,6 +1171,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment GNU
@deftypefun wint_t getwc_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{getwc_unlocked} function is equivalent to the @code{getwc}
function except that it does not implicitly lock the stream.
@@ -1082,6 +1181,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun int getchar (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{getchar} function is equivalent to @code{getc} with @code{stdin}
as the value of the @var{stream} argument.
@end deftypefun
@@ -1089,6 +1189,7 @@ as the value of the @var{stream} argument.
@comment wchar.h
@comment ISO
@deftypefun wint_t getwchar (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{getwchar} function is equivalent to @code{getwc} with @code{stdin}
as the value of the @var{stream} argument.
@end deftypefun
@@ -1096,6 +1197,7 @@ as the value of the @var{stream} argument.
@comment stdio.h
@comment POSIX
@deftypefun int getchar_unlocked (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{getchar_unlocked} function is equivalent to the @code{getchar}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -1103,6 +1205,7 @@ function except that it does not implicitly lock the stream.
@comment wchar.h
@comment GNU
@deftypefun wint_t getwchar_unlocked (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{getwchar_unlocked} function is equivalent to the @code{getwchar}
function except that it does not implicitly lock the stream.
@@ -1145,6 +1248,7 @@ y_or_n_p (const char *question)
@comment stdio.h
@comment SVID
@deftypefun int getw (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function reads a word (that is, an @code{int}) from @var{stream}.
It's provided for compatibility with SVID. We recommend you use
@code{fread} instead (@pxref{Block Input/Output}). Unlike @code{getc},
@@ -1173,6 +1277,12 @@ All these functions are declared in @file{stdio.h}.
@comment stdio.h
@comment GNU
@deftypefun ssize_t getline (char **@var{lineptr}, size_t *@var{n}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
+@c Besides the usual possibility of getting an inconsistent stream in a
+@c signal handler or leaving it inconsistent in case of cancellation,
+@c the possibility of leaving a dangling pointer upon cancellation
+@c between reallocing the buffer at *lineptr and updating the pointer
+@c brings about another case of @acucorrupt.
This function reads an entire line from @var{stream}, storing the text
(including the newline and a terminating null character) in a buffer
and storing the buffer address in @code{*@var{lineptr}}.
@@ -1208,6 +1318,8 @@ If an error occurs or end of file is reached without any bytes read,
@comment stdio.h
@comment GNU
@deftypefun ssize_t getdelim (char **@var{lineptr}, size_t *@var{n}, int @var{delimiter}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
+@c See the getline @acucorrupt note.
This function is like @code{getline} except that the character which
tells it to stop reading is not necessarily newline. The argument
@var{delimiter} specifies the delimiter character; @code{getdelim} keeps
@@ -1232,6 +1344,7 @@ getline (char **lineptr, size_t *n, FILE *stream)
@comment stdio.h
@comment ISO
@deftypefun {char *} fgets (char *@var{s}, int @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{fgets} function reads characters from the stream @var{stream}
up to and including a newline character and stores them in the string
@var{s}, adding a null character to mark the end of the string. You
@@ -1255,6 +1368,7 @@ error message. We recommend using @code{getline} instead of @code{fgets}.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} fgetws (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{fgetws} function reads wide characters from the stream
@var{stream} up to and including a newline character and stores them in
the string @var{ws}, adding a null wide character to mark the end of the
@@ -1280,6 +1394,7 @@ message.
@comment stdio.h
@comment GNU
@deftypefun {char *} fgets_unlocked (char *@var{s}, int @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fgets_unlocked} function is equivalent to the @code{fgets}
function except that it does not implicitly lock the stream.
@@ -1289,6 +1404,7 @@ This function is a GNU extension.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} fgetws_unlocked (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fgetws_unlocked} function is equivalent to the @code{fgetws}
function except that it does not implicitly lock the stream.
@@ -1298,6 +1414,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefn {Deprecated function} {char *} gets (char *@var{s})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The function @code{gets} reads characters from the stream @code{stdin}
up to the next newline character, and stores them in the string @var{s}.
The newline character is discarded (note that this differs from the
@@ -1388,6 +1505,7 @@ reverses the action of @code{getc}.
@comment stdio.h
@comment ISO
@deftypefun int ungetc (int @var{c}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{ungetc} function pushes back the character @var{c} onto the
input stream @var{stream}. So the next input from @var{stream} will
read @var{c} before anything else.
@@ -1425,6 +1543,7 @@ will encounter end of file.
@comment wchar.h
@comment ISO
@deftypefun wint_t ungetwc (wint_t @var{wc}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{ungetwc} function behaves just like @code{ungetc} just that it
pushes back a wide character.
@end deftypefun
@@ -1483,6 +1602,7 @@ These functions are declared in @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun size_t fread (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function reads up to @var{count} objects of size @var{size} into
the array @var{data}, from the stream @var{stream}. It returns the
number of objects actually read, which might be less than @var{count} if
@@ -1498,6 +1618,7 @@ object. Therefore, the stream remains at the actual end of the file.
@comment stdio.h
@comment GNU
@deftypefun size_t fread_unlocked (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fread_unlocked} function is equivalent to the @code{fread}
function except that it does not implicitly lock the stream.
@@ -1507,6 +1628,7 @@ This function is a GNU extension.
@comment stdio.h
@comment ISO
@deftypefun size_t fwrite (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function writes up to @var{count} objects of size @var{size} from
the array @var{data}, to the stream @var{stream}. The return value is
normally @var{count}, if the call succeeds. Any other value indicates
@@ -1516,6 +1638,7 @@ some sort of error, such as running out of space.
@comment stdio.h
@comment GNU
@deftypefun size_t fwrite_unlocked (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fwrite_unlocked} function is equivalent to the @code{fwrite}
function except that it does not implicitly lock the stream.
@@ -2257,6 +2380,7 @@ just include @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun int printf (const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
The @code{printf} function prints the optional arguments under the
control of the template string @var{template} to the stream
@code{stdout}. It returns the number of characters printed, or a
@@ -2266,6 +2390,7 @@ negative value if there was an output error.
@comment wchar.h
@comment ISO
@deftypefun int wprintf (const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
The @code{wprintf} function prints the optional arguments under the
control of the wide template string @var{template} to the stream
@code{stdout}. It returns the number of wide characters printed, or a
@@ -2275,6 +2400,7 @@ negative value if there was an output error.
@comment stdio.h
@comment ISO
@deftypefun int fprintf (FILE *@var{stream}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is just like @code{printf}, except that the output is
written to the stream @var{stream} instead of @code{stdout}.
@end deftypefun
@@ -2282,6 +2408,7 @@ written to the stream @var{stream} instead of @code{stdout}.
@comment wchar.h
@comment ISO
@deftypefun int fwprintf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is just like @code{wprintf}, except that the output is
written to the stream @var{stream} instead of @code{stdout}.
@end deftypefun
@@ -2289,6 +2416,7 @@ written to the stream @var{stream} instead of @code{stdout}.
@comment stdio.h
@comment ISO
@deftypefun int sprintf (char *@var{s}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is like @code{printf}, except that the output is stored in the character
array @var{s} instead of written to a stream. A null character is written
to mark the end of the string.
@@ -2313,6 +2441,7 @@ described below.
@comment wchar.h
@comment GNU
@deftypefun int swprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is like @code{wprintf}, except that the output is stored in the
wide character array @var{ws} instead of written to a stream. A null
wide character is written to mark the end of the string. The @var{size}
@@ -2337,6 +2466,7 @@ again and decided to not define a function exactly corresponding to
@comment stdio.h
@comment GNU
@deftypefun int snprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{snprintf} function is similar to @code{sprintf}, except that
the @var{size} argument specifies the maximum number of characters to
produce. The trailing null character is counted towards this limit, so
@@ -2407,6 +2537,7 @@ in dynamically allocated memory.
@comment stdio.h
@comment GNU
@deftypefun int asprintf (char **@var{ptr}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function is similar to @code{sprintf}, except that it dynamically
allocates a string (as with @code{malloc}; @pxref{Unconstrained
Allocation}) to hold the output, instead of putting the output in a
@@ -2439,6 +2570,7 @@ make_message (char *name, char *value)
@comment stdio.h
@comment GNU
@deftypefun int obstack_printf (struct obstack *@var{obstack}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
This function is similar to @code{asprintf}, except that it uses the
obstack @var{obstack} to allocate the space. @xref{Obstacks}.
@@ -2509,6 +2641,7 @@ Prototypes for these functions are declared in @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun int vprintf (const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is similar to @code{printf} except that, instead of taking
a variable number of arguments directly, it takes an argument list
pointer @var{ap}.
@@ -2517,6 +2650,7 @@ pointer @var{ap}.
@comment wchar.h
@comment ISO
@deftypefun int vwprintf (const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is similar to @code{wprintf} except that, instead of taking
a variable number of arguments directly, it takes an argument list
pointer @var{ap}.
@@ -2525,6 +2659,48 @@ pointer @var{ap}.
@comment stdio.h
@comment ISO
@deftypefun int vfprintf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+@c Although vfprintf sets up a cleanup region to release the lock on the
+@c output stream, it doesn't use it to release args_value or string in
+@c case of cancellation. This doesn't make it unsafe, but cancelling it
+@c may leak memory. The unguarded use of __printf_function_table is
+@c also of concern for all callers.
+@c _itoa ok
+@c _udiv_qrnnd_preinv ok
+@c group_number ok
+@c _i18n_number_rewrite
+@c __wctrans ok
+@c __towctrans @mtslocale
+@c __wcrtomb ok? dup below
+@c outdigit_value ok
+@c outdigitwc_value ok
+@c outchar ok
+@c outstring ok
+@c PAD ok
+@c __printf_fp @mtslocale @ascuheap @acsmem
+@c __printf_fphex @mtslocale
+@c __readonly_area
+@c [GNU/Linux] fopen, strtoul, free
+@c __strerror_r ok if no translation, check otherwise
+@c __btowc ? gconv-modules
+@c __wcrtomb ok (not using internal state) gconv-modules
+@c ARGCHECK
+@c UNBUFFERED_P (tested before taking the stream lock)
+@c buffered_vfprintf ok
+@c __find_spec(wc|mb)
+@c read_int
+@c __libc_use_alloca
+@c process_arg
+@c process_string_arg
+@c extend_alloca
+@c __parse_one_spec(wc|mb)
+@c *__printf_arginfo_table unguarded
+@c __printf_va_arg_table-> unguarded
+@c *__printf_function_table unguarded
+@c done_add
+@c printf_unknown
+@c outchar
+@c _itoa_word
This is the equivalent of @code{fprintf} with the variable argument list
specified directly as for @code{vprintf}.
@end deftypefun
@@ -2532,6 +2708,7 @@ specified directly as for @code{vprintf}.
@comment wchar.h
@comment ISO
@deftypefun int vfwprintf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This is the equivalent of @code{fwprintf} with the variable argument list
specified directly as for @code{vwprintf}.
@end deftypefun
@@ -2539,6 +2716,7 @@ specified directly as for @code{vwprintf}.
@comment stdio.h
@comment ISO
@deftypefun int vsprintf (char *@var{s}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is the equivalent of @code{sprintf} with the variable argument list
specified directly as for @code{vprintf}.
@end deftypefun
@@ -2546,6 +2724,7 @@ specified directly as for @code{vprintf}.
@comment wchar.h
@comment GNU
@deftypefun int vswprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is the equivalent of @code{swprintf} with the variable argument list
specified directly as for @code{vwprintf}.
@end deftypefun
@@ -2553,6 +2732,7 @@ specified directly as for @code{vwprintf}.
@comment stdio.h
@comment GNU
@deftypefun int vsnprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is the equivalent of @code{snprintf} with the variable argument list
specified directly as for @code{vprintf}.
@end deftypefun
@@ -2560,6 +2740,7 @@ specified directly as for @code{vprintf}.
@comment stdio.h
@comment GNU
@deftypefun int vasprintf (char **@var{ptr}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{vasprintf} function is the equivalent of @code{asprintf} with the
variable argument list specified directly as for @code{vprintf}.
@end deftypefun
@@ -2567,6 +2748,10 @@ variable argument list specified directly as for @code{vprintf}.
@comment stdio.h
@comment GNU
@deftypefun int obstack_vprintf (struct obstack *@var{obstack}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c The obstack is not guarded by mutexes, it might be at an inconsistent
+@c state within a signal handler, and it could be left at an
+@c inconsistent state in case of cancellation.
The @code{obstack_vprintf} function is the equivalent of
@code{obstack_printf} with the variable argument list specified directly
as for @code{vprintf}.@refill
@@ -2639,6 +2824,7 @@ file @file{printf.h}.
@comment printf.h
@comment GNU
@deftypefun size_t parse_printf_format (const char *@var{template}, size_t @var{n}, int *@var{argtypes})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function returns information about the number and types of
arguments expected by the @code{printf} template string @var{template}.
The information is stored in the array @var{argtypes}; each element of
@@ -2879,6 +3065,12 @@ The function to register a new output conversion is
@comment printf.h
@comment GNU
@deftypefun int register_printf_function (int @var{spec}, printf_function @var{handler-function}, printf_arginfo_function @var{arginfo-function})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:printfext}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
+@c This function is guarded by the global non-recursive libc lock, but
+@c users of the variables it sets aren't, and those should be MT-Safe,
+@c so we're ruling out the use of this extension with threads. Calling
+@c it from a signal handler may self-deadlock, and cancellation may
+@c leave the lock held, besides leaking allocated memory.
This function defines the conversion specifier character @var{spec}.
Thus, if @var{spec} is @code{'Y'}, it defines the conversion @samp{%Y}.
You can redefine the built-in conversions like @samp{%s}, but flag
@@ -3125,6 +3317,12 @@ which implement a special way to print floating-point numbers.
@comment printf.h
@comment GNU
@deftypefun int printf_size (FILE *@var{fp}, const struct printf_info *@var{info}, const void *const *@var{args})
+@safety{@prelim{}@mtsafe{@mtsrace{:fp} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @acucorrupt{}}}
+@c This is meant to be called by vfprintf, that should hold the lock on
+@c the stream, but if this function is called directly, output will be
+@c racy, besides the uses of the global locale object while other
+@c threads may be changing it and the possbility of leaving the stream
+@c object in an inconsistent state in case of cancellation.
Print a given floating point number as for the format @code{%f} except
that there is a postfix character indicating the divisor for the
number to make this less than 1000. There are two possible divisors:
@@ -3183,6 +3381,7 @@ provide the function which returns information about the arguments.
@comment printf.h
@comment GNU
@deftypefun int printf_size_info (const struct printf_info *@var{info}, size_t @var{n}, int *@var{argtypes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function will return in @var{argtypes} the information about the
used parameters in the way the @code{vfprintf} implementation expects
it. The format always takes one argument.
@@ -3803,6 +4002,7 @@ Prototypes for these functions are in the header file @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun int scanf (const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
The @code{scanf} function reads formatted input from the stream
@code{stdin} under the control of the template string @var{template}.
The optional arguments are pointers to the places which receive the
@@ -3817,6 +4017,7 @@ template, then @code{EOF} is returned.
@comment wchar.h
@comment ISO
@deftypefun int wscanf (const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
The @code{wscanf} function reads formatted input from the stream
@code{stdin} under the control of the template string @var{template}.
The optional arguments are pointers to the places which receive the
@@ -3831,6 +4032,7 @@ template, then @code{WEOF} is returned.
@comment stdio.h
@comment ISO
@deftypefun int fscanf (FILE *@var{stream}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is just like @code{scanf}, except that the input is read
from the stream @var{stream} instead of @code{stdin}.
@end deftypefun
@@ -3838,6 +4040,7 @@ from the stream @var{stream} instead of @code{stdin}.
@comment wchar.h
@comment ISO
@deftypefun int fwscanf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is just like @code{wscanf}, except that the input is read
from the stream @var{stream} instead of @code{stdin}.
@end deftypefun
@@ -3845,6 +4048,7 @@ from the stream @var{stream} instead of @code{stdin}.
@comment stdio.h
@comment ISO
@deftypefun int sscanf (const char *@var{s}, const char *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is like @code{scanf}, except that the characters are taken from the
null-terminated string @var{s} instead of from a stream. Reaching the
end of the string is treated as an end-of-file condition.
@@ -3858,6 +4062,7 @@ as an argument to receive a string read under control of the @samp{%s},
@comment wchar.h
@comment ISO
@deftypefun int swscanf (const wchar_t *@var{ws}, const wchar_t *@var{template}, @dots{})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is like @code{wscanf}, except that the characters are taken from the
null-terminated string @var{ws} instead of from a stream. Reaching the
end of the string is treated as an end-of-file condition.
@@ -3884,6 +4089,7 @@ introduced in @w{ISO C99} and were before available as GNU extensions.
@comment stdio.h
@comment ISO
@deftypefun int vscanf (const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is similar to @code{scanf}, but instead of taking
a variable number of arguments directly, it takes an argument list
pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
@@ -3892,6 +4098,7 @@ pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
@comment wchar.h
@comment ISO
@deftypefun int vwscanf (const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This function is similar to @code{wscanf}, but instead of taking
a variable number of arguments directly, it takes an argument list
pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
@@ -3900,6 +4107,7 @@ pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
@comment stdio.h
@comment ISO
@deftypefun int vfscanf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This is the equivalent of @code{fscanf} with the variable argument list
specified directly as for @code{vscanf}.
@end deftypefun
@@ -3907,6 +4115,7 @@ specified directly as for @code{vscanf}.
@comment wchar.h
@comment ISO
@deftypefun int vfwscanf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
This is the equivalent of @code{fwscanf} with the variable argument list
specified directly as for @code{vwscanf}.
@end deftypefun
@@ -3914,6 +4123,7 @@ specified directly as for @code{vwscanf}.
@comment stdio.h
@comment ISO
@deftypefun int vsscanf (const char *@var{s}, const char *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is the equivalent of @code{sscanf} with the variable argument list
specified directly as for @code{vscanf}.
@end deftypefun
@@ -3921,6 +4131,7 @@ specified directly as for @code{vscanf}.
@comment wchar.h
@comment ISO
@deftypefun int vswscanf (const wchar_t *@var{s}, const wchar_t *@var{template}, va_list @var{ap})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This is the equivalent of @code{swscanf} with the variable argument list
specified directly as for @code{vwscanf}.
@end deftypefun
@@ -3970,6 +4181,7 @@ This symbol is declared in @file{wchar.h}.
@comment stdio.h
@comment ISO
@deftypefun int feof (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
The @code{feof} function returns nonzero if and only if the end-of-file
indicator for the stream @var{stream} is set.
@@ -3979,6 +4191,9 @@ This symbol is declared in @file{stdio.h}.
@comment stdio.h
@comment GNU
@deftypefun int feof_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c There isn't much of a thread unsafety risk in reading a flag word and
+@c testing a bit in it.
The @code{feof_unlocked} function is equivalent to the @code{feof}
function except that it does not implicitly lock the stream.
@@ -3990,6 +4205,7 @@ This symbol is declared in @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun int ferror (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
The @code{ferror} function returns nonzero if and only if the error
indicator for the stream @var{stream} is set, indicating that an error
has occurred on a previous operation on the stream.
@@ -4000,6 +4216,7 @@ This symbol is declared in @file{stdio.h}.
@comment stdio.h
@comment GNU
@deftypefun int ferror_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{ferror_unlocked} function is equivalent to the @code{ferror}
function except that it does not implicitly lock the stream.
@@ -4027,6 +4244,7 @@ function.
@comment stdio.h
@comment ISO
@deftypefun void clearerr (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
This function clears the end-of-file and error indicators for the
stream @var{stream}.
@@ -4037,6 +4255,7 @@ end-of-file indicator for the stream.
@comment stdio.h
@comment GNU
@deftypefun void clearerr_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@assafe{}@acsafe{}}
The @code{clearerr_unlocked} function is equivalent to the @code{clearerr}
function except that it does not implicitly lock the stream.
@@ -4150,6 +4369,7 @@ are declared in the header file @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun {long int} ftell (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function returns the current file position of the stream
@var{stream}.
@@ -4162,6 +4382,7 @@ possibly for other reasons as well. If a failure occurs, a value of
@comment stdio.h
@comment Unix98
@deftypefun off_t ftello (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{ftello} function is similar to @code{ftell}, except that it
returns a value of type @code{off_t}. Systems which support this type
use it to describe all file positions, unlike the POSIX specification
@@ -4185,6 +4406,7 @@ LFS interface transparently replaces the old interface.
@comment stdio.h
@comment Unix98
@deftypefun off64_t ftello64 (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is similar to @code{ftello} with the only difference that
the return value is of type @code{off64_t}. This also requires that the
stream @var{stream} was opened using either @code{fopen64},
@@ -4200,6 +4422,7 @@ and so transparently replaces the old interface.
@comment stdio.h
@comment ISO
@deftypefun int fseek (FILE *@var{stream}, long int @var{offset}, int @var{whence})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{fseek} function is used to change the file position of the
stream @var{stream}. The value of @var{whence} must be one of the
constants @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}, to
@@ -4219,6 +4442,7 @@ place in the file.
@comment stdio.h
@comment Unix98
@deftypefun int fseeko (FILE *@var{stream}, off_t @var{offset}, int @var{whence})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is similar to @code{fseek} but it corrects a problem with
@code{fseek} in a system with POSIX types. Using a value of type
@code{long int} for the offset is not compatible with POSIX.
@@ -4242,6 +4466,7 @@ LFS interface transparently replaces the old interface.
@comment stdio.h
@comment Unix98
@deftypefun int fseeko64 (FILE *@var{stream}, off64_t @var{offset}, int @var{whence})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is similar to @code{fseeko} with the only difference that
the @var{offset} parameter is of type @code{off64_t}. This also
requires that the stream @var{stream} was opened using either
@@ -4290,6 +4515,7 @@ the offset provided is relative to the end of the file.
@comment stdio.h
@comment ISO
@deftypefun void rewind (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{rewind} function positions the stream @var{stream} at the
beginning of the file. It is equivalent to calling @code{fseek} or
@code{fseeko} on the @var{stream} with an @var{offset} argument of
@@ -4411,6 +4637,7 @@ representation.
@comment stdio.h
@comment ISO
@deftypefun int fgetpos (FILE *@var{stream}, fpos_t *@var{position})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function stores the value of the file position indicator for the
stream @var{stream} in the @code{fpos_t} object pointed to by
@var{position}. If successful, @code{fgetpos} returns zero; otherwise
@@ -4425,6 +4652,7 @@ interface transparently replaces the old interface.
@comment stdio.h
@comment Unix98
@deftypefun int fgetpos64 (FILE *@var{stream}, fpos64_t *@var{position})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is similar to @code{fgetpos} but the file position is
returned in a variable of type @code{fpos64_t} to which @var{position}
points.
@@ -4437,6 +4665,7 @@ and so transparently replaces the old interface.
@comment stdio.h
@comment ISO
@deftypefun int fsetpos (FILE *@var{stream}, const fpos_t *@var{position})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function sets the file position indicator for the stream @var{stream}
to the position @var{position}, which must have been set by a previous
call to @code{fgetpos} on the same stream. If successful, @code{fsetpos}
@@ -4453,6 +4682,7 @@ interface transparently replaces the old interface.
@comment stdio.h
@comment Unix98
@deftypefun int fsetpos64 (FILE *@var{stream}, const fpos64_t *@var{position})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is similar to @code{fsetpos} but the file position used
for positioning is provided in a variable of type @code{fpos64_t} to
which @var{position} points.
@@ -4564,6 +4794,7 @@ If you want to flush the buffered output at another time, call
@comment stdio.h
@comment ISO
@deftypefun int fflush (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function causes any buffered output on @var{stream} to be delivered
to the file. If @var{stream} is a null pointer, then
@code{fflush} causes buffered output on @emph{all} open output streams
@@ -4576,6 +4807,7 @@ otherwise.
@comment stdio.h
@comment POSIX
@deftypefun int fflush_unlocked (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{fflush_unlocked} function is equivalent to the @code{fflush}
function except that it does not implicitly lock the stream.
@end deftypefun
@@ -4592,6 +4824,7 @@ exported.
@comment stdio_ext.h
@comment GNU
@deftypefun void _flushlbf (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
The @code{_flushlbf} function flushes all line buffered streams
currently opened.
@@ -4613,6 +4846,7 @@ situation a non-standard function introduced in Solaris and available in
@comment stdio_ext.h
@comment GNU
@deftypefun void __fpurge (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
The @code{__fpurge} function causes the buffer of the stream
@var{stream} to be emptied. If the stream is currently in read mode all
input in the buffer is lost. If the stream is in output mode the
@@ -4637,6 +4871,7 @@ file @file{stdio.h}.
@comment stdio.h
@comment ISO
@deftypefun int setvbuf (FILE *@var{stream}, char *@var{buf}, int @var{mode}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function is used to specify that the stream @var{stream} should
have the buffering mode @var{mode}, which can be either @code{_IOFBF}
(for full buffering), @code{_IOLBF} (for line buffering), or
@@ -4714,6 +4949,7 @@ efficient size.
@comment stdio.h
@comment ISO
@deftypefun void setbuf (FILE *@var{stream}, char *@var{buf})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
If @var{buf} is a null pointer, the effect of this function is
equivalent to calling @code{setvbuf} with a @var{mode} argument of
@code{_IONBF}. Otherwise, it is equivalent to calling @code{setvbuf}
@@ -4727,6 +4963,7 @@ use @code{setvbuf} in all new programs.
@comment stdio.h
@comment BSD
@deftypefun void setbuffer (FILE *@var{stream}, char *@var{buf}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
If @var{buf} is a null pointer, this function makes @var{stream} unbuffered.
Otherwise, it makes @var{stream} fully buffered using @var{buf} as the
buffer. The @var{size} argument specifies the length of @var{buf}.
@@ -4738,6 +4975,7 @@ This function is provided for compatibility with old BSD code. Use
@comment stdio.h
@comment BSD
@deftypefun void setlinebuf (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
This function makes @var{stream} be line buffered, and allocates the
buffer for you.
@@ -4752,6 +4990,7 @@ using a non-standard function introduced in Solaris and available in
@comment stdio_ext.h
@comment GNU
@deftypefun int __flbf (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{__flbf} function will return a nonzero value in case the
stream @var{stream} is line buffered. Otherwise the return value is
zero.
@@ -4765,6 +5004,7 @@ much of it is used. These functions were also introduced in Solaris.
@comment stdio_ext.h
@comment GNU
@deftypefun size_t __fbufsize (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
The @code{__fbufsize} function return the size of the buffer in the
stream @var{stream}. This value can be used to optimize the use of the
stream.
@@ -4775,6 +5015,7 @@ This function is declared in the @file{stdio_ext.h} header.
@comment stdio_ext.h
@comment GNU
@deftypefun size_t __fpending (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
The @code{__fpending}
function returns the number of bytes currently in the output buffer.
For wide-oriented stream the measuring unit is wide characters. This
@@ -4822,6 +5063,10 @@ I/O to a string or memory buffer. These facilities are declared in
@comment stdio.h
@comment GNU
@deftypefun {FILE *} fmemopen (void *@var{buf}, size_t @var{size}, const char *@var{opentype})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
+@c Unlike open_memstream, fmemopen does (indirectly) call _IO_link_in,
+@c bringing with it additional potential for async trouble with
+@c list_all_lock.
This function opens a stream that allows the access specified by the
@var{opentype} argument, that reads from or writes to the buffer specified
by the argument @var{buf}. This array must be at least @var{size} bytes long.
@@ -4874,6 +5119,7 @@ Got r
@comment stdio.h
@comment GNU
@deftypefun {FILE *} open_memstream (char **@var{ptr}, size_t *@var{sizeloc})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function opens a stream for writing to a buffer. The buffer is
allocated dynamically and grown as necessary, using @code{malloc}.
After you've closed the stream, this buffer is your responsibility to
@@ -4989,6 +5235,7 @@ closed.
@comment stdio.h
@comment GNU
@deftypefun {FILE *} fopencookie (void *@var{cookie}, const char *@var{opentype}, cookie_io_functions_t @var{io-functions})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
This function actually creates the stream for communicating with the
@var{cookie} using the functions in the @var{io-functions} argument.
The @var{opentype} argument is interpreted as for @code{fopen};
@@ -5170,6 +5417,7 @@ It is a non-recoverable error.
@comment fmtmsg.h
@comment XPG
@deftypefun int fmtmsg (long int @var{classification}, const char *@var{label}, int @var{severity}, const char *@var{text}, const char *@var{action}, const char *@var{tag})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acsafe{}}
Display a message described by its parameters on the device(s) specified
in the @var{classification} parameter. The @var{label} parameter
identifies the source of the message. The string should consist of two
@@ -5310,6 +5558,7 @@ introducing new classes in a running program. One could use the
but this is toilsome.
@deftypefun int addseverity (int @var{severity}, const char *@var{string})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
This function allows the introduction of new severity classes which can be
addressed by the @var{severity} parameter of the @code{fmtmsg} function.
The @var{severity} parameter of @code{addseverity} must match the value
diff --git a/libc/manual/string.texi b/libc/manual/string.texi
index e59f18c9c..6dcd4aff4 100644
--- a/libc/manual/string.texi
+++ b/libc/manual/string.texi
@@ -219,6 +219,7 @@ This function is declared in the header file @file{string.h}.
@comment string.h
@comment ISO
@deftypefun size_t strlen (const char *@var{s})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strlen} function returns the length of the null-terminated
string @var{s} in bytes. (In other words, it returns the offset of the
terminating null character within the array.)
@@ -285,6 +286,7 @@ The wide character equivalent is declared in @file{wchar.h}.
@comment wchar.h
@comment ISO
@deftypefun size_t wcslen (const wchar_t *@var{ws})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcslen} function is the wide character equivalent to
@code{strlen}. The return value is the number of wide characters in the
wide character string pointed to by @var{ws} (this is also the offset of
@@ -300,6 +302,7 @@ This function was introduced in @w{Amendment 1} to @w{ISO C90}.
@comment string.h
@comment GNU
@deftypefun size_t strnlen (const char *@var{s}, size_t @var{maxlen})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strnlen} function returns the length of the string @var{s} in
bytes if this length is smaller than @var{maxlen} bytes. Otherwise it
returns @var{maxlen}. Therefore this function is equivalent to
@@ -322,6 +325,7 @@ This function is a GNU extension and is declared in @file{string.h}.
@comment wchar.h
@comment GNU
@deftypefun size_t wcsnlen (const wchar_t *@var{ws}, size_t @var{maxlen})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{wcsnlen} is the wide character equivalent to @code{strnlen}. The
@var{maxlen} parameter specifies the maximum number of wide characters.
@@ -367,6 +371,7 @@ Functions}).
@comment string.h
@comment ISO
@deftypefun {void *} memcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{memcpy} function copies @var{size} bytes from the object
beginning at @var{from} into the object beginning at @var{to}. The
behavior of this function is undefined if the two arrays @var{to} and
@@ -388,6 +393,7 @@ memcpy (new, old, arraysize * sizeof (struct foo));
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wmemcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wmemcpy} function copies @var{size} wide characters from the object
beginning at @var{wfrom} into the object beginning at @var{wto}. The
behavior of this function is undefined if the two arrays @var{wto} and
@@ -413,6 +419,7 @@ This function was introduced in @w{Amendment 1} to @w{ISO C90}.
@comment string.h
@comment GNU
@deftypefun {void *} mempcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{mempcpy} function is nearly identical to the @code{memcpy}
function. It copies @var{size} bytes from the object beginning at
@code{from} into the object pointed to by @var{to}. But instead of
@@ -440,6 +447,7 @@ This function is a GNU extension.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} wmempcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wmempcpy} function is nearly identical to the @code{wmemcpy}
function. It copies @var{size} wide characters from the object
beginning at @code{wfrom} into the object pointed to by @var{wto}. But
@@ -468,6 +476,7 @@ This function is a GNU extension.
@comment string.h
@comment ISO
@deftypefun {void *} memmove (void *@var{to}, const void *@var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{memmove} copies the @var{size} bytes at @var{from} into the
@var{size} bytes at @var{to}, even if those two blocks of space
overlap. In the case of overlap, @code{memmove} is careful to copy the
@@ -480,6 +489,7 @@ The value returned by @code{memmove} is the value of @var{to}.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wmemmove (wchar_t *@var{wto}, const wchar_t *@var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{wmemmove} copies the @var{size} wide characters at @var{wfrom}
into the @var{size} wide characters at @var{wto}, even if those two
blocks of space overlap. In the case of overlap, @code{memmove} is
@@ -507,6 +517,7 @@ This function is a GNU extension.
@comment string.h
@comment SVID
@deftypefun {void *} memccpy (void *restrict @var{to}, const void *restrict @var{from}, int @var{c}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function copies no more than @var{size} bytes from @var{from} to
@var{to}, stopping if a byte matching @var{c} is found. The return
value is a pointer into @var{to} one byte past where @var{c} was copied,
@@ -517,6 +528,7 @@ or a null pointer if no byte matching @var{c} appeared in the first
@comment string.h
@comment ISO
@deftypefun {void *} memset (void *@var{block}, int @var{c}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function copies the value of @var{c} (converted to an
@code{unsigned char}) into each of the first @var{size} bytes of the
object beginning at @var{block}. It returns the value of @var{block}.
@@ -525,6 +537,7 @@ object beginning at @var{block}. It returns the value of @var{block}.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wmemset (wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function copies the value of @var{wc} into each of the first
@var{size} wide characters of the object beginning at @var{block}. It
returns the value of @var{block}.
@@ -533,6 +546,7 @@ returns the value of @var{block}.
@comment string.h
@comment ISO
@deftypefun {char *} strcpy (char *restrict @var{to}, const char *restrict @var{from})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This copies characters from the string @var{from} (up to and including
the terminating null character) into the string @var{to}. Like
@code{memcpy}, this function has undefined results if the strings
@@ -542,6 +556,7 @@ overlap. The return value is the value of @var{to}.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcscpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This copies wide characters from the string @var{wfrom} (up to and
including the terminating null wide character) into the string
@var{wto}. Like @code{wmemcpy}, this function has undefined results if
@@ -551,6 +566,7 @@ the strings overlap. The return value is the value of @var{wto}.
@comment string.h
@comment ISO
@deftypefun {char *} strncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{strcpy} but always copies exactly
@var{size} characters into @var{to}.
@@ -576,6 +592,7 @@ waste a considerable amount of time copying null characters.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcsncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{wcscpy} but always copies exactly
@var{size} wide characters into @var{wto}.
@@ -602,6 +619,7 @@ waste a considerable amount of time copying null wide characters.
@comment string.h
@comment SVID
@deftypefun {char *} strdup (const char *@var{s})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function copies the null-terminated string @var{s} into a newly
allocated string. The string is allocated using @code{malloc}; see
@ref{Unconstrained Allocation}. If @code{malloc} cannot allocate space
@@ -612,6 +630,7 @@ returns a pointer to the new string.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} wcsdup (const wchar_t *@var{ws})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function copies the null-terminated wide character string @var{ws}
into a newly allocated string. The string is allocated using
@code{malloc}; see @ref{Unconstrained Allocation}. If @code{malloc}
@@ -625,6 +644,7 @@ This function is a GNU extension.
@comment string.h
@comment GNU
@deftypefun {char *} strndup (const char *@var{s}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
This function is similar to @code{strdup} but always copies at most
@var{size} characters into the newly allocated string.
@@ -642,6 +662,7 @@ terminates the destination string.
@comment string.h
@comment Unknown origin
@deftypefun {char *} stpcpy (char *restrict @var{to}, const char *restrict @var{from})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is like @code{strcpy}, except that it returns a pointer to
the end of the string @var{to} (that is, the address of the terminating
null character @code{to + strlen (from)}) rather than the beginning.
@@ -664,6 +685,7 @@ declared in @file{string.h}.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} wcpcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is like @code{wcscpy}, except that it returns a pointer to
the end of the string @var{wto} (that is, the address of the terminating
null character @code{wto + strlen (wfrom)}) rather than the beginning.
@@ -679,6 +701,7 @@ The behavior of @code{wcpcpy} is undefined if the strings overlap.
@comment string.h
@comment GNU
@deftypefun {char *} stpncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{stpcpy} but copies always exactly
@var{size} characters into @var{to}.
@@ -704,6 +727,7 @@ declared in @file{string.h}.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} wcpncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{wcpcpy} but copies always exactly
@var{wsize} characters into @var{wto}.
@@ -731,6 +755,7 @@ Its behavior is undefined if the strings overlap.
@comment string.h
@comment GNU
@deftypefn {Macro} {char *} strdupa (const char *@var{s})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This macro is similar to @code{strdup} but allocates the new string
using @code{alloca} instead of @code{malloc} (@pxref{Variable Size
Automatic}). This means of course the returned string has the same
@@ -757,6 +782,7 @@ This function is only available if GNU CC is used.
@comment string.h
@comment GNU
@deftypefn {Macro} {char *} strndupa (const char *@var{s}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is similar to @code{strndup} but like @code{strdupa} it
allocates the new string using @code{alloca}
@pxref{Variable Size Automatic}. The same advantages and limitations
@@ -772,6 +798,7 @@ parameter list in a function call.
@comment string.h
@comment ISO
@deftypefun {char *} strcat (char *restrict @var{to}, const char *restrict @var{from})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strcat} function is similar to @code{strcpy}, except that the
characters from @var{from} are concatenated or appended to the end of
@var{to}, instead of overwriting it. That is, the first character from
@@ -794,6 +821,7 @@ This function has undefined results if the strings overlap.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcscat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcscat} function is similar to @code{wcscpy}, except that the
characters from @var{wfrom} are concatenated or appended to the end of
@var{wto}, instead of overwriting it. That is, the first character from
@@ -942,6 +970,7 @@ is almost always unnecessary to use @code{strcat}.
@comment string.h
@comment ISO
@deftypefun {char *} strncat (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is like @code{strcat} except that not more than @var{size}
characters from @var{from} are appended to the end of @var{to}. A
single null character is also always appended to @var{to}, so the total
@@ -968,6 +997,7 @@ The behavior of @code{strncat} is undefined if the strings overlap.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcsncat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is like @code{wcscat} except that not more than @var{size}
characters from @var{from} are appended to the end of @var{to}. A
single null character is also always appended to @var{to}, so the total
@@ -1012,6 +1042,7 @@ hello, wo
@comment string.h
@comment BSD
@deftypefun void bcopy (const void *@var{from}, void *@var{to}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is a partially obsolete alternative for @code{memmove}, derived from
BSD. Note that it is not quite equivalent to @code{memmove}, because the
arguments are not in the same order and there is no return value.
@@ -1020,6 +1051,7 @@ arguments are not in the same order and there is no return value.
@comment string.h
@comment BSD
@deftypefun void bzero (void *@var{block}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is a partially obsolete alternative for @code{memset}, derived from
BSD. Note that it is not as general as @code{memset}, because the only
value it can store is zero.
@@ -1055,6 +1087,7 @@ All of these functions are declared in the header file @file{string.h}.
@comment string.h
@comment ISO
@deftypefun int memcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{memcmp} compares the @var{size} bytes of memory
beginning at @var{a1} against the @var{size} bytes of memory beginning
at @var{a2}. The value returned has the same sign as the difference
@@ -1068,6 +1101,7 @@ If the contents of the two blocks are equal, @code{memcmp} returns
@comment wchar.h
@comment ISO
@deftypefun int wmemcmp (const wchar_t *@var{a1}, const wchar_t *@var{a2}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{wmemcmp} compares the @var{size} wide characters
beginning at @var{a1} against the @var{size} wide characters beginning
at @var{a2}. The value returned is smaller than or larger than zero
@@ -1120,6 +1154,7 @@ you are better off writing a specialized comparison function to compare
@comment string.h
@comment ISO
@deftypefun int strcmp (const char *@var{s1}, const char *@var{s2})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strcmp} function compares the string @var{s1} against
@var{s2}, returning a value that has the same sign as the difference
between the first differing pair of characters (interpreted as
@@ -1139,6 +1174,7 @@ strings are written in into account. To get that one has to use
@comment wchar.h
@comment ISO
@deftypefun int wcscmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcscmp} function compares the wide character string @var{ws1}
against @var{ws2}. The value returned is smaller than or larger than zero
@@ -1159,6 +1195,11 @@ strings are written in into account. To get that one has to use
@comment string.h
@comment BSD
@deftypefun int strcasecmp (const char *@var{s1}, const char *@var{s2})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Although this calls tolower multiple times, it's a macro, and
+@c strcasecmp is optimized so that the locale pointer is read only once.
+@c There are some asm implementations too, for which the single-read
+@c from locale TLS pointers also applies.
This function is like @code{strcmp}, except that differences in case are
ignored. How uppercase and lowercase characters are related is
determined by the currently selected locale. In the standard @code{"C"}
@@ -1172,6 +1213,9 @@ regards these characters as parts of the alphabet they do match.
@comment wchar.h
@comment GNU
@deftypefun int wcscasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Since towlower is not a macro, the locale object may be read multiple
+@c times.
This function is like @code{wcscmp}, except that differences in case are
ignored. How uppercase and lowercase characters are related is
determined by the currently selected locale. In the standard @code{"C"}
@@ -1185,6 +1229,7 @@ regards these characters as parts of the alphabet they do match.
@comment string.h
@comment ISO
@deftypefun int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is the similar to @code{strcmp}, except that no more than
@var{size} characters are compared. In other words, if the two
strings are the same in their first @var{size} characters, the
@@ -1194,6 +1239,7 @@ return value is zero.
@comment wchar.h
@comment ISO
@deftypefun int wcsncmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function is the similar to @code{wcscmp}, except that no more than
@var{size} wide characters are compared. In other words, if the two
strings are the same in their first @var{size} wide characters, the
@@ -1203,6 +1249,7 @@ return value is zero.
@comment string.h
@comment BSD
@deftypefun int strncasecmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is like @code{strncmp}, except that differences in case
are ignored. Like @code{strcasecmp}, it is locale dependent how
uppercase and lowercase characters are related.
@@ -1214,6 +1261,7 @@ uppercase and lowercase characters are related.
@comment wchar.h
@comment GNU
@deftypefun int wcsncasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{s2}, size_t @var{n})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
This function is like @code{wcsncmp}, except that differences in case
are ignored. Like @code{wcscasecmp}, it is locale dependent how
uppercase and lowercase characters are related.
@@ -1247,6 +1295,8 @@ strncmp ("hello, world", "hello, stupid world!!!", 5)
@comment string.h
@comment GNU
@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c Calls isdigit multiple times, locale may change in between.
The @code{strverscmp} function compares the string @var{s1} against
@var{s2}, considering them as holding indices/version numbers. The
return value follows the same conventions as found in the
@@ -1297,6 +1347,7 @@ because filenames frequently hold indices/version numbers.
@comment string.h
@comment BSD
@deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is an obsolete alias for @code{memcmp}, derived from BSD.
@end deftypefun
@@ -1343,6 +1394,9 @@ transformed strings with @code{strcmp} or @code{wcscmp}.
@comment string.h
@comment ISO
@deftypefun int strcoll (const char *@var{s1}, const char *@var{s2})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls strcoll_l with the current locale, which dereferences only the
+@c LC_COLLATE data pointer.
The @code{strcoll} function is similar to @code{strcmp} but uses the
collating sequence of the current locale for collation (the
@code{LC_COLLATE} locale).
@@ -1351,6 +1405,8 @@ collating sequence of the current locale for collation (the
@comment wchar.h
@comment ISO
@deftypefun int wcscoll (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Same as strcoll, but calling wcscoll_l.
The @code{wcscoll} function is similar to @code{wcscmp} but uses the
collating sequence of the current locale for collation (the
@code{LC_COLLATE} locale).
@@ -1391,6 +1447,7 @@ sort_strings (char **array, int nstrings)
@comment string.h
@comment ISO
@deftypefun size_t strxfrm (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The function @code{strxfrm} transforms the string @var{from} using the
collation transformation determined by the locale currently selected for
collation, and stores the transformed string in the array @var{to}. Up
@@ -1420,6 +1477,7 @@ what size the allocated array should be. It does not matter what
@comment wchar.h
@comment ISO
@deftypefun size_t wcsxfrm (wchar_t *restrict @var{wto}, const wchar_t *@var{wfrom}, size_t @var{size})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The function @code{wcsxfrm} transforms wide character string @var{wfrom}
using the collation transformation determined by the locale currently
selected for collation, and stores the transformed string in the array
@@ -1579,6 +1637,7 @@ declared in the header file @file{string.h}.
@comment string.h
@comment ISO
@deftypefun {void *} memchr (const void *@var{block}, int @var{c}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function finds the first occurrence of the byte @var{c} (converted
to an @code{unsigned char}) in the initial @var{size} bytes of the
object beginning at @var{block}. The return value is a pointer to the
@@ -1588,6 +1647,7 @@ located byte, or a null pointer if no match was found.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wmemchr (const wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function finds the first occurrence of the wide character @var{wc}
in the initial @var{size} wide characters of the object beginning at
@var{block}. The return value is a pointer to the located wide
@@ -1597,6 +1657,7 @@ character, or a null pointer if no match was found.
@comment string.h
@comment GNU
@deftypefun {void *} rawmemchr (const void *@var{block}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Often the @code{memchr} function is used with the knowledge that the
byte @var{c} is available in the memory block specified by the
parameters. But this means that the @var{size} parameter is not really
@@ -1627,6 +1688,7 @@ This function is a GNU extension.
@comment string.h
@comment GNU
@deftypefun {void *} memrchr (const void *@var{block}, int @var{c}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{memrchr} is like @code{memchr}, except that it searches
backwards from the end of the block defined by @var{block} and @var{size}
(instead of forwards from the front).
@@ -1637,6 +1699,7 @@ This function is a GNU extension.
@comment string.h
@comment ISO
@deftypefun {char *} strchr (const char *@var{string}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strchr} function finds the first occurrence of the character
@var{c} (converted to a @code{char}) in the null-terminated string
beginning at @var{string}. The return value is a pointer to the located
@@ -1663,6 +1726,7 @@ need that information, it is better (but less portable) to use
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcschr (const wchar_t *@var{wstring}, int @var{wc})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcschr} function finds the first occurrence of the wide
character @var{wc} in the null-terminated wide character string
beginning at @var{wstring}. The return value is a pointer to the
@@ -1678,6 +1742,7 @@ to use @code{wcschrnul} in this case, though.
@comment string.h
@comment GNU
@deftypefun {char *} strchrnul (const char *@var{string}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{strchrnul} is the same as @code{strchr} except that if it does
not find the character, it returns a pointer to string's terminating
null character rather than a null pointer.
@@ -1688,6 +1753,7 @@ This function is a GNU extension.
@comment wchar.h
@comment GNU
@deftypefun {wchar_t *} wcschrnul (const wchar_t *@var{wstring}, wchar_t @var{wc})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{wcschrnul} is the same as @code{wcschr} except that if it does not
find the wide character, it returns a pointer to wide character string's
terminating null wide character rather than a null pointer.
@@ -1723,6 +1789,7 @@ actually is faster.
@comment string.h
@comment ISO
@deftypefun {char *} strrchr (const char *@var{string}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{strrchr} is like @code{strchr}, except that it searches
backwards from the end of the string @var{string} (instead of forwards
from the front).
@@ -1737,6 +1804,7 @@ strrchr ("hello, world", 'l')
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcsrchr (const wchar_t *@var{wstring}, wchar_t @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The function @code{wcsrchr} is like @code{wcschr}, except that it searches
backwards from the end of the string @var{wstring} (instead of forwards
from the front).
@@ -1745,6 +1813,7 @@ from the front).
@comment string.h
@comment ISO
@deftypefun {char *} strstr (const char *@var{haystack}, const char *@var{needle})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{strchr}, except that it searches @var{haystack} for a
substring @var{needle} rather than just a single character. It
returns a pointer into the string @var{haystack} that is the first
@@ -1763,6 +1832,7 @@ strstr ("hello, world", "wo")
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcsstr (const wchar_t *@var{haystack}, const wchar_t *@var{needle})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{wcschr}, except that it searches @var{haystack} for a
substring @var{needle} rather than just a single wide character. It
returns a pointer into the string @var{haystack} that is the first wide
@@ -1773,6 +1843,7 @@ character of the substring, or a null pointer if no match was found. If
@comment wchar.h
@comment XPG
@deftypefun {wchar_t *} wcswcs (const wchar_t *@var{haystack}, const wchar_t *@var{needle})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{wcswcs} is a deprecated alias for @code{wcsstr}. This is the
name originally used in the X/Open Portability Guide before the
@w{Amendment 1} to @w{ISO C90} was published.
@@ -1782,6 +1853,9 @@ name originally used in the X/Open Portability Guide before the
@comment string.h
@comment GNU
@deftypefun {char *} strcasestr (const char *@var{haystack}, const char *@var{needle})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c There may be multiple calls of strncasecmp, each accessing the locale
+@c object independently.
This is like @code{strstr}, except that it ignores case in searching for
the substring. Like @code{strcasecmp}, it is locale dependent how
uppercase and lowercase characters are related.
@@ -1800,6 +1874,7 @@ strcasestr ("hello, World", "wo")
@comment string.h
@comment GNU
@deftypefun {void *} memmem (const void *@var{haystack}, size_t @var{haystack-len},@*const void *@var{needle}, size_t @var{needle-len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is like @code{strstr}, but @var{needle} and @var{haystack} are byte
arrays rather than null-terminated strings. @var{needle-len} is the
length of @var{needle} and @var{haystack-len} is the length of
@@ -1811,6 +1886,7 @@ This function is a GNU extension.
@comment string.h
@comment ISO
@deftypefun size_t strspn (const char *@var{string}, const char *@var{skipset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strspn} (``string span'') function returns the length of the
initial substring of @var{string} that consists entirely of characters that
are members of the set specified by the string @var{skipset}. The order
@@ -1831,6 +1907,7 @@ separately. The function is not locale-dependent.
@comment wchar.h
@comment ISO
@deftypefun size_t wcsspn (const wchar_t *@var{wstring}, const wchar_t *@var{skipset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcsspn} (``wide character string span'') function returns the
length of the initial substring of @var{wstring} that consists entirely
of wide characters that are members of the set specified by the string
@@ -1841,6 +1918,7 @@ important.
@comment string.h
@comment ISO
@deftypefun size_t strcspn (const char *@var{string}, const char *@var{stopset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strcspn} (``string complement span'') function returns the length
of the initial substring of @var{string} that consists entirely of characters
that are @emph{not} members of the set specified by the string @var{stopset}.
@@ -1862,6 +1940,7 @@ separately. The function is not locale-dependent.
@comment wchar.h
@comment ISO
@deftypefun size_t wcscspn (const wchar_t *@var{wstring}, const wchar_t *@var{stopset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcscspn} (``wide character string complement span'') function
returns the length of the initial substring of @var{wstring} that
consists entirely of wide characters that are @emph{not} members of the
@@ -1873,6 +1952,7 @@ the set @var{stopset}.)
@comment string.h
@comment ISO
@deftypefun {char *} strpbrk (const char *@var{string}, const char *@var{stopset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{strpbrk} (``string pointer break'') function is related to
@code{strcspn}, except that it returns a pointer to the first character
in @var{string} that is a member of the set @var{stopset} instead of the
@@ -1897,6 +1977,7 @@ separately. The function is not locale-dependent.
@comment wchar.h
@comment ISO
@deftypefun {wchar_t *} wcspbrk (const wchar_t *@var{wstring}, const wchar_t *@var{stopset})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{wcspbrk} (``wide character string pointer break'') function is
related to @code{wcscspn}, except that it returns a pointer to the first
wide character in @var{wstring} that is a member of the set
@@ -1910,6 +1991,7 @@ returns a null pointer if no such character from @var{stopset} is found.
@comment string.h
@comment BSD
@deftypefun {char *} index (const char *@var{string}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{index} is another name for @code{strchr}; they are exactly the same.
New code should always use @code{strchr} since this name is defined in
@w{ISO C} while @code{index} is a BSD invention which never was available
@@ -1919,6 +2001,7 @@ on @w{System V} derived systems.
@comment string.h
@comment BSD
@deftypefun {char *} rindex (const char *@var{string}, int @var{c})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{rindex} is another name for @code{strrchr}; they are exactly the same.
New code should always use @code{strrchr} since this name is defined in
@w{ISO C} while @code{rindex} is a BSD invention which never was available
@@ -1940,6 +2023,7 @@ in the header file @file{string.h}.
@comment string.h
@comment ISO
@deftypefun {char *} strtok (char *restrict @var{newstring}, const char *restrict @var{delimiters})
+@safety{@prelim{}@mtunsafe{@mtasurace{:strtok}}@asunsafe{}@acsafe{}}
A string can be split into tokens by making a series of calls to the
function @code{strtok}.
@@ -1978,7 +2062,8 @@ separately. The function is not locale-dependent.
@comment wchar.h
@comment ISO
-@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const wchar_t *@var{delimiters})
+@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const wchar_t *@var{delimiters}, wchar_t **@var{save_ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
A string can be split into tokens by making a series of calls to the
function @code{wcstok}.
@@ -1986,11 +2071,8 @@ The string to be split up is passed as the @var{newstring} argument on
the first call only. The @code{wcstok} function uses this to set up
some internal state information. Subsequent calls to get additional
tokens from the same wide character string are indicated by passing a
-null pointer as the @var{newstring} argument. Calling @code{wcstok}
-with another non-null @var{newstring} argument reinitializes the state
-information. It is guaranteed that no other library function ever calls
-@code{wcstok} behind your back (which would mess up this internal state
-information).
+null pointer as the @var{newstring} argument, which causes the pointer
+previously stored in @var{save_ptr} to be used instead.
The @var{delimiters} argument is a wide character string that specifies
a set of delimiters that may surround the token being extracted. All
@@ -1999,8 +2081,10 @@ The first wide character that is @emph{not} a member of this set of
delimiters marks the beginning of the next token. The end of the token
is found by looking for the next wide character that is a member of the
delimiter set. This wide character in the original wide character
-string @var{newstring} is overwritten by a null wide character, and the
-pointer to the beginning of the token in @var{newstring} is returned.
+string @var{newstring} is overwritten by a null wide character, the
+pointer past the overwritten wide character is saved in @var{save_ptr},
+and the pointer to the beginning of the token in @var{newstring} is
+returned.
On the next call to @code{wcstok}, the searching begins at the next
wide character beyond the one that marked the end of the previous token.
@@ -2010,11 +2094,6 @@ same on every call in a series of calls to @code{wcstok}.
If the end of the wide character string @var{newstring} is reached, or
if the remainder of string consists only of delimiter wide characters,
@code{wcstok} returns a null pointer.
-
-Note that ``character'' is here used in the sense of byte. In a string
-using a multibyte character encoding (abstract) character consisting of
-more than one byte are not treated as an entity. Each byte is treated
-separately. The function is not locale-dependent.
@end deftypefun
@strong{Warning:} Since @code{strtok} and @code{wcstok} alter the string
@@ -2039,7 +2118,7 @@ does not have as its purpose the modification of a certain data
structure, then it is error-prone to modify the data structure
temporarily.
-The functions @code{strtok} and @code{wcstok} are not reentrant.
+The function @code{strtok} is not reentrant, whereas @code{wcstok} is.
@xref{Nonreentrancy}, for a discussion of where and why reentrancy is
important.
@@ -2075,13 +2154,15 @@ available for multibyte character strings.
@comment string.h
@comment POSIX
@deftypefun {char *} strtok_r (char *@var{newstring}, const char *@var{delimiters}, char **@var{save_ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Just like @code{strtok}, this function splits the string into several
tokens which can be accessed by successive calls to @code{strtok_r}.
-The difference is that the information about the next token is stored in
-the space pointed to by the third argument, @var{save_ptr}, which is a
-pointer to a string pointer. Calling @code{strtok_r} with a null
-pointer for @var{newstring} and leaving @var{save_ptr} between the calls
-unchanged does the job without hindering reentrancy.
+The difference is that, as in @code{wcstok}, the information about the
+next token is stored in the space pointed to by the third argument,
+@var{save_ptr}, which is a pointer to a string pointer. Calling
+@code{strtok_r} with a null pointer for @var{newstring} and leaving
+@var{save_ptr} between the calls unchanged does the job without
+hindering reentrancy.
This function is defined in POSIX.1 and can be found on many systems
which support multi-threading.
@@ -2090,6 +2171,7 @@ which support multi-threading.
@comment string.h
@comment BSD
@deftypefun {char *} strsep (char **@var{string_ptr}, const char *@var{delimiter})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function has a similar functionality as @code{strtok_r} with the
@var{newstring} argument replaced by the @var{save_ptr} argument. The
initialization of the moving pointer has to be done by the user.
@@ -2141,6 +2223,7 @@ token = strsep (&running, delimiters); /* token => NULL */
@comment string.h
@comment GNU
@deftypefun {char *} basename (const char *@var{filename})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The GNU version of the @code{basename} function returns the last
component of the path in @var{filename}. This function is the preferred
usage, since it does not modify the argument, @var{filename}, and
@@ -2176,6 +2259,7 @@ on different systems.
@comment libgen.h
@comment XPG
@deftypefun {char *} basename (const char *@var{path})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This is the standard XPG defined @code{basename}. It is similar in
spirit to the GNU version, but may modify the @var{path} by removing
trailing '/' characters. If the @var{path} is made up entirely of '/'
@@ -2211,6 +2295,7 @@ main (int argc, char *argv[])
@comment libgen.h
@comment XPG
@deftypefun {char *} dirname (char *@var{path})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{dirname} function is the compliment to the XPG version of
@code{basename}. It returns the parent directory of the file specified
by @var{path}. If @var{path} is @code{NULL}, an empty string, or
@@ -2233,6 +2318,8 @@ The prototype for this function is in @file{string.h}.
@comment string.h
@comment GNU
@deftypefun {char *} strfry (char *@var{string})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Calls initstate_r, time, getpid, strlen, and random_r.
@code{strfry} creates a pseudorandom anagram of a string, replacing the
input with the anagram in place. For each position in the string,
@@ -2268,6 +2355,7 @@ This function is declared in @file{string.h}.
@comment string.h
@comment GNU
@deftypefun {void *} memfrob (void *@var{mem}, size_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{memfrob} transforms (frobnicates) each byte of the data structure
at @var{mem}, which is @var{length} bytes long, by bitwise exclusive
@@ -2298,6 +2386,7 @@ this task.
@comment stdlib.h
@comment XPG
@deftypefun {char *} l64a (long int @var{n})
+@safety{@prelim{}@mtunsafe{@mtasurace{:l64a}}@asunsafe{}@acsafe{}}
This function encodes a 32-bit input value using characters from the
basic character set. It returns a pointer to a 7 character buffer which
contains an encoded version of @var{n}. To encode a series of bytes the
@@ -2373,6 +2462,7 @@ used.
@comment stdlib.h
@comment XPG
@deftypefun {long int} a64l (const char *@var{string})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The parameter @var{string} should contain a string which was produced by
a call to @code{l64a}. The function processes at least 6 characters of
this string, and decodes the characters it finds according to the table
@@ -2459,6 +2549,7 @@ These functions are declared in the standard include file @file{argz.h}.
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_create (char *const @var{argv}[], char **@var{argz}, size_t *@var{argz_len})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{argz_create} function converts the Unix-style argument vector
@var{argv} (a vector of pointers to normal C strings, terminated by
@code{(char *)0}; @pxref{Program Arguments}) into an argz vector with
@@ -2468,6 +2559,7 @@ the same elements, which is returned in @var{argz} and @var{argz_len}.
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_create_sep (const char *@var{string}, int @var{sep}, char **@var{argz}, size_t *@var{argz_len})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{argz_create_sep} function converts the null-terminated string
@var{string} into an argz vector (returned in @var{argz} and
@var{argz_len}) by splitting it into elements at every occurrence of the
@@ -2477,6 +2569,7 @@ character @var{sep}.
@comment argz.h
@comment GNU
@deftypefun {size_t} argz_count (const char *@var{argz}, size_t @var{arg_len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Returns the number of elements in the argz vector @var{argz} and
@var{argz_len}.
@end deftypefun
@@ -2484,6 +2577,7 @@ Returns the number of elements in the argz vector @var{argz} and
@comment argz.h
@comment GNU
@deftypefun {void} argz_extract (const char *@var{argz}, size_t @var{argz_len}, char **@var{argv})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{argz_extract} function converts the argz vector @var{argz} and
@var{argz_len} into a Unix-style argument vector stored in @var{argv},
by putting pointers to every element in @var{argz} into successive
@@ -2501,6 +2595,7 @@ still active. This function is useful for passing the elements in
@comment argz.h
@comment GNU
@deftypefun {void} argz_stringify (char *@var{argz}, size_t @var{len}, int @var{sep})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{argz_stringify} converts @var{argz} into a normal string with
the elements separated by the character @var{sep}, by replacing each
@code{'\0'} inside @var{argz} (except the last one, which terminates the
@@ -2511,6 +2606,8 @@ readable manner.
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_add (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls strlen and argz_append.
The @code{argz_add} function adds the string @var{str} to the end of the
argz vector @code{*@var{argz}}, and updates @code{*@var{argz}} and
@code{*@var{argz_len}} accordingly.
@@ -2519,6 +2616,7 @@ argz vector @code{*@var{argz}}, and updates @code{*@var{argz}} and
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_add_sep (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str}, int @var{delim})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{argz_add_sep} function is similar to @code{argz_add}, but
@var{str} is split into separate elements in the result at occurrences of
the character @var{delim}. This is useful, for instance, for
@@ -2529,6 +2627,7 @@ a value of @code{':'} for @var{delim}.
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_append (char **@var{argz}, size_t *@var{argz_len}, const char *@var{buf}, size_t @var{buf_len})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{argz_append} function appends @var{buf_len} bytes starting at
@var{buf} to the argz vector @code{*@var{argz}}, reallocating
@code{*@var{argz}} to accommodate it, and adding @var{buf_len} to
@@ -2538,6 +2637,8 @@ The @code{argz_append} function appends @var{buf_len} bytes starting at
@comment argz.h
@comment GNU
@deftypefun {void} argz_delete (char **@var{argz}, size_t *@var{argz_len}, char *@var{entry})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls free if no argument is left.
If @var{entry} points to the beginning of one of the elements in the
argz vector @code{*@var{argz}}, the @code{argz_delete} function will
remove this entry and reallocate @code{*@var{argz}}, modifying
@@ -2549,6 +2650,8 @@ pointers into argz vectors such as @var{entry} will then become invalid.
@comment argz.h
@comment GNU
@deftypefun {error_t} argz_insert (char **@var{argz}, size_t *@var{argz_len}, char *@var{before}, const char *@var{entry})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls argz_add or realloc and memmove.
The @code{argz_insert} function inserts the string @var{entry} into the
argz vector @code{*@var{argz}} at a point just before the existing
element pointed to by @var{before}, reallocating @code{*@var{argz}} and
@@ -2562,6 +2665,7 @@ is @code{0}, @var{entry} is added to the end instead (as if by
@comment argz.h
@comment GNU
@deftypefun {char *} argz_next (const char *@var{argz}, size_t @var{argz_len}, const char *@var{entry})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{argz_next} function provides a convenient way of iterating
over the elements in the argz vector @var{argz}. It returns a pointer
to the next element in @var{argz} after the element @var{entry}, or
@@ -2595,6 +2699,7 @@ invariant is maintained for argz vectors created by the functions here.
@comment argz.h
@comment GNU
@deftypefun error_t argz_replace (@w{char **@var{argz}, size_t *@var{argz_len}}, @w{const char *@var{str}, const char *@var{with}}, @w{unsigned *@var{replace_count}})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
Replace any occurrences of the string @var{str} in @var{argz} with
@var{with}, reallocating @var{argz} as necessary. If
@var{replace_count} is non-zero, @code{*@var{replace_count}} will be
@@ -2630,6 +2735,7 @@ These functions are declared in the standard include file @file{envz.h}.
@comment envz.h
@comment GNU
@deftypefun {char *} envz_entry (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{envz_entry} function finds the entry in @var{envz} with the name
@var{name}, and returns a pointer to the whole entry---that is, the argz
element which begins with @var{name} followed by a @code{'='} character. If
@@ -2639,6 +2745,7 @@ there is no entry with that name, @code{0} is returned.
@comment envz.h
@comment GNU
@deftypefun {char *} envz_get (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{envz_get} function finds the entry in @var{envz} with the name
@var{name} (like @code{envz_entry}), and returns a pointer to the value
portion of that entry (following the @code{'='}). If there is no entry with
@@ -2648,6 +2755,9 @@ that name (or only a null entry), @code{0} is returned.
@comment envz.h
@comment GNU
@deftypefun {error_t} envz_add (char **@var{envz}, size_t *@var{envz_len}, const char *@var{name}, const char *@var{value})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c Calls envz_remove, which calls enz_entry and argz_delete, and then
+@c argz_add or equivalent code that reallocs and appends name=value.
The @code{envz_add} function adds an entry to @code{*@var{envz}}
(updating @code{*@var{envz}} and @code{*@var{envz_len}}) with the name
@var{name}, and value @var{value}. If an entry with the same name
@@ -2659,6 +2769,7 @@ already exists in @var{envz}, it is removed first. If @var{value} is
@comment envz.h
@comment GNU
@deftypefun {error_t} envz_merge (char **@var{envz}, size_t *@var{envz_len}, const char *@var{envz2}, size_t @var{envz2_len}, int @var{override})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
The @code{envz_merge} function adds each entry in @var{envz2} to @var{envz},
as if with @code{envz_add}, updating @code{*@var{envz}} and
@code{*@var{envz_len}}. If @var{override} is true, then values in @var{envz2}
@@ -2672,6 +2783,10 @@ being added to @var{envz}, if @var{override} is false.
@comment envz.h
@comment GNU
@deftypefun {void} envz_strip (char **@var{envz}, size_t *@var{envz_len})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{envz_strip} function removes any null entries from @var{envz},
updating @code{*@var{envz}} and @code{*@var{envz_len}}.
@end deftypefun
+
+@c FIXME this are undocumented:
+@c strcasecmp_l @safety{@mtsafe{}@assafe{}@acsafe{}} see strcasecmp
diff --git a/libc/manual/sysinfo.texi b/libc/manual/sysinfo.texi
index 5b6e8d017..1c9f51b1b 100644
--- a/libc/manual/sysinfo.texi
+++ b/libc/manual/sysinfo.texi
@@ -91,6 +91,9 @@ by calling these functions.
@comment unistd.h
@comment BSD
@deftypefun int gethostname (char *@var{name}, size_t @var{size})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on unix; implemented in terms of uname on posix and of
+@c hurd_get_host_config on hurd.
This function returns the host name of the system on which it is called,
in the array @var{name}. The @var{size} argument specifies the size of
this array, in bytes. Note that this is @emph{not} the DNS hostname.
@@ -121,6 +124,9 @@ error code.
@comment unistd.h
@comment BSD
@deftypefun int sethostname (const char *@var{name}, size_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on unix; implemented in terms of hurd_set_host_config
+@c on hurd.
The @code{sethostname} function sets the host name of the system that
calls it to @var{name}, a string with length @var{length}. Only
privileged processes are permitted to do this.
@@ -145,6 +151,8 @@ This process cannot set the host name because it is not privileged.
@comment unistd.h
@comment ???
@deftypefun int getdomainnname (char *@var{name}, size_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Syscalls uname, then strlen and memcpy.
@cindex NIS domain name
@cindex YP domain name
@@ -159,6 +167,8 @@ The specifics of this function are analogous to @code{gethostname}, above.
@comment unistd.h
@comment ???
@deftypefun int setdomainname (const char *@var{name}, size_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall.
@cindex NIS domain name
@cindex YP domain name
@@ -173,6 +183,10 @@ The specifics of this function are analogous to @code{sethostname}, above.
@comment unistd.h
@comment BSD
@deftypefun {long int} gethostid (void)
+@safety{@prelim{}@mtsafe{@mtshostid{} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c On HURD, calls _hurd_get_host_config and strtol. On Linux, open
+@c HOSTIDFILE, reads an int32_t and closes; if that fails, it calls
+@c gethostname and gethostbyname_r to use the h_addr.
This function returns the ``host ID'' of the machine the program is
running on. By convention, this is usually the primary Internet IP address
of that machine, converted to a @w{@code{long int}}. However, on some
@@ -190,6 +204,7 @@ on the results of @code{gethostname}. For more information on IP addresses,
@comment unistd.h
@comment BSD
@deftypefun int sethostid (long int @var{id})
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtshostid{}}}@asunsafe{}@acunsafe{@acucorrupt{} @acsfd{}}}
The @code{sethostid} function sets the ``host ID'' of the host machine
to @var{id}. Only privileged processes are permitted to do this. Usually
it happens just once, at system boot time.
@@ -296,6 +311,10 @@ use of the rest of the structure.
@comment sys/utsname.h
@comment POSIX.1
@deftypefun int uname (struct utsname *@var{info})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall on unix; the posix fallback is to call gethostname and
+@c then fills in the other fields with constants; on HURD, it calls
+@c proc_uname and then gethostname.
The @code{uname} function fills in the structure pointed to by
@var{info} with information about the operating system and host machine.
A non-negative value indicates that the data was successfully stored.
@@ -471,6 +490,12 @@ contains a set of three functions which are designed in the usual way.
@comment fstab.h
@comment BSD
@deftypefun int setfsent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c setfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c fstab_init(1) @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c malloc dup @ascuheap @acsmem
+@c rewind dup @asucorrupt @acucorrupt [no @aculock]
+@c setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock
This function makes sure that the internal read pointer for the
@file{fstab} file is at the beginning of the file. This is done by
either opening the file or resetting the read pointer.
@@ -486,6 +511,9 @@ file.
@comment fstab.h
@comment BSD
@deftypefun void endfsent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c endfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd
This function makes sure that all resources acquired by a prior call to
@code{setfsent} (explicitly or implicitly by calling @code{getfsent}) are
freed.
@@ -494,6 +522,13 @@ freed.
@comment fstab.h
@comment BSD
@deftypefun {struct fstab *} getfsent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c getfsent @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c fstab_init(0) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c fstab_fetch @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+@c getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+@c fstab_convert @mtasurace:fsent
+@c hasmntopt dup ok
This function returns the next entry of the @file{fstab} file. If this
is the first call to any of the functions handling @file{fstab} since
program start or the last call of @code{endfsent}, the file will be
@@ -508,6 +543,12 @@ returns a @code{NULL} pointer.
@comment fstab.h
@comment BSD
@deftypefun {struct fstab *} getfsspec (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c getffsspec @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+@c strcmp dup ok
+@c fstab_convert dup @mtasurace:fsent
This function returns the next entry of the @file{fstab} file which has
a string equal to @var{name} pointed to by the @code{fs_spec} element.
Since there is normally exactly one entry for each special device it
@@ -525,6 +566,12 @@ returns a @code{NULL} pointer.
@comment fstab.h
@comment BSD
@deftypefun {struct fstab *} getfsfile (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c getffsfile @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
+@c fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
+@c fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+@c strcmp dup ok
+@c fstab_convert dup @mtasurace:fsent
This function returns the next entry of the @file{fstab} file which has
a string equal to @var{name} pointed to by the @code{fs_file} element.
Since there is normally exactly one entry for each mount point it
@@ -640,6 +687,13 @@ contains functions to alter the file and test for specific options.
@comment mntent.h
@comment BSD
@deftypefun {FILE *} setmntent (const char *@var{file}, const char *@var{mode})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
+@c setmntent @ascuheap @asulock @acsmem @acsfd @aculock
+@c strlen dup ok
+@c mempcpy dup ok
+@c memcpy dup ok
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no @mtasurace:stream @asulock: exclusive stream]
The @code{setmntent} function prepares the file named @var{FILE} which
must be in the format of a @file{fstab} and @file{mtab} file for the
upcoming processing through the other functions of the family. The
@@ -655,6 +709,9 @@ and @code{errno} is set accordingly.
@comment mntent.h
@comment BSD
@deftypefun int endmntent (FILE *@var{stream})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c endmntent @ascuheap @asulock @aculock @acsmem @acsfd
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
This function takes for the @var{stream} parameter a file handle which
previously was returned from the @code{setmntent} call.
@code{endmntent} closes the stream and frees all resources.
@@ -666,6 +723,12 @@ is @math{0}.
@comment mntent.h
@comment BSD
@deftypefun {struct mntent *} getmntent (FILE *@var{stream})
+@safety{@prelim{}@mtunsafe{@mtasurace{:mntentbuf} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asuinit{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{}}}
+@c getmntent @mtasurace:mntentbuf @mtslocale @asucorrupt @ascuheap @asuinit @acuinit @acucorrupt @aculock @acsmem
+@c libc_once @ascuheap @asuinit @acuinit @acsmem
+@c allocate @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
The @code{getmntent} function takes as the parameter a file handle
previously returned by successful call to @code{setmntent}. It returns
a pointer to a static variable of type @code{struct mntent} which is
@@ -692,6 +755,16 @@ used in situations where multiple threads access the file.
@comment mntent.h
@comment BSD
@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mntent *@var{result}, char *@var{buffer}, int @var{bufsize})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
+@c getmntent_r @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+@c flockfile dup @aculock
+@c fgets_unlocked dup @asucorrupt @acucorrupt [locked, so no @mtsrace:stream]
+@c funlockfile dup @aculock
+@c strchr dup ok
+@c strspn dup ok
+@c strsep dup ok
+@c decode_name ok
+@c sscanf dup @mtslocale @ascuheap @acsmem
The @code{getmntent_r} function is the reentrant variant of
@code{getmntent}. It also returns the next entry from the file and
returns a pointer. The actual variable the values are stored in is not
@@ -717,6 +790,12 @@ end of file reached,
@comment mntent.h
@comment BSD
@deftypefun int addmntent (FILE *@var{stream}, const struct mntent *@var{mnt})
+@safety{@prelim{}@mtunsafe{@mtasurace{:stream} @mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+@c addmntent @mtasurace:stream @mtslocale @asucorrupt @acucorrupt
+@c fseek dup @asucorrupt @acucorrupt [no @aculock]
+@c encode_name ok
+@c fprintf dup @mtslocale @asucorrupt @acucorrupt [no @ascuheap @acsmem, no @aculock]
+@c fflush dup @asucorrupt @acucorrupt [no @aculock]
The @code{addmntent} function allows adding a new entry to the file
previously opened with @code{setmntent}. The new entries are always
appended. I.e., even if the position of the file descriptor is not at
@@ -740,6 +819,11 @@ appropriately.
@comment mntent.h
@comment BSD
@deftypefun {char *} hasmntopt (const struct mntent *@var{mnt}, const char *@var{opt})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c hasmntopt ok
+@c strlen dup ok
+@c strstr dup ok
+@c strchr dup ok
This function can be used to check whether the string pointed to by the
@code{mnt_opts} element of the variable pointed to by @var{mnt} contains
the option @var{opt}. If this is true a pointer to the beginning of the
@@ -778,6 +862,8 @@ The symbols in this section are declared in @file{sys/mount.h}.
@comment sys/mount.h
@comment SVID, BSD
@deftypefun {int} mount (const char *@var{special_file}, const char *@var{dir}, const char *@var{fstype}, unsigned long int @var{options}, const void *@var{data})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall.
@code{mount} mounts or remounts a filesystem. The two operations are
quite different and are merged rather unnaturally into this one function.
@@ -982,6 +1068,8 @@ not one that uses a device.
@comment sys/mount.h
@comment GNU
@deftypefun {int} umount2 (const char *@var{file}, int @var{flags})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall.
@code{umount2} unmounts a filesystem.
@@ -1047,6 +1135,8 @@ This function is not available on all systems.
@comment sys/mount.h
@comment SVID, GNU
@deftypefun {int} umount (const char *@var{file})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall or wrapper for umount2.
@code{umount} does the same thing as @code{umount2} with @var{flags} set
to zeroes. It is more widely available than @code{umount2} but since it
@@ -1067,6 +1157,8 @@ The symbols used in this section are declared in the file @file{sys/sysctl.h}.
@comment sys/sysctl.h
@comment BSD
@deftypefun int sysctl (int *@var{names}, int @var{nlen}, void *@var{oldval}, size_t *@var{oldlenp}, void *@var{newval}, size_t @var{newlen})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, Linux only.
@code{sysctl} gets or sets a specified system parameter. There are so
many of these parameters that it is not practical to list them all here,
diff --git a/libc/manual/syslog.texi b/libc/manual/syslog.texi
index 4e64d2a5e..a08e103bf 100644
--- a/libc/manual/syslog.texi
+++ b/libc/manual/syslog.texi
@@ -147,6 +147,17 @@ The symbols referred to in this section are declared in the file
@comment syslog.h
@comment BSD
@deftypefun void openlog (const char *@var{ident}, int @var{option}, int @var{facility})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c openlog @asulock @aculock @acsfd
+@c libc_lock_lock @asulock @aculock
+@c openlog_internal @acsfd [always guarded by syslog_lock, so no race]
+@c strncpy dup ok
+@c socket dup @acsfd
+@c fcntl dup ok
+@c connect dup ok
+@c close dup @acsfd
+@c cancel_handler(NULL) @aculock
+@c libc_lock_unlock @aculock
@code{openlog} opens or reopens a connection to Syslog in preparation
for submitting messages.
@@ -276,6 +287,38 @@ The symbols referred to in this section are declared in the file
@comment syslog.h
@comment BSD
@deftypefun void syslog (int @var{facility_priority}, const char *@var{format}, @dots{})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c syslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c va_start dup ok
+@c vsyslog_chk @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c syslog(INTERNALLOG) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c open_memstream @ascuheap @acsmem
+@c stpcpy dup ok
+@c getpid dup ok
+@c mempcpy dup ok
+@c fsetlocking [no @mtasurace:stream @asulock for exclusive stream]
+@c fprintf @mtslocale @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt on temp memstream]
+@c time dup ok
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c strftime_l(C) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c ftell dup ok [no @asucorrupt @aculock @acucorrupt on temp memstream]
+@c fputs_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
+@c putc_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
+@c vfprintf/vfprintf_chk dup @mtslocale @ascuheap @acsmem [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
+@c fclose dup @ascuheap @acsmem [no @asulock @aculock @acsfd on caller-locked memstream]
+@c writev dup ok
+@c libc_lock_lock dup @asulock @aculock
+@c memset dup ok
+@c sigemptyset dup ok
+@c sigaction(SIGPIPE) dup @mtasusig:PIPE @acusig:PIPE
+@c openlog_internal dup @acsfd
+@c send dup ok
+@c closelog_internal dup @acsfd
+@c open dup @acsfd
+@c dprintf dup ok
+@c libc_lock_unlock @asulock @aculock
+@c free dup @acsuheap @acsmem
+@c va_end dup ok
@code{syslog} submits a message to the Syslog facility. It does this by
writing to the Unix domain socket @code{/dev/log}.
@@ -404,6 +447,9 @@ syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR),
@comment syslog.h
@comment BSD
@deftypefun void vsyslog (int @var{facility_priority}, const char *@var{format}, va_list @var{arglist})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c vsyslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c vsyslog_chk dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
This is functionally identical to @code{syslog}, with the BSD style variable
length argument.
@@ -420,6 +466,13 @@ The symbols referred to in this section are declared in the file
@comment syslog.h
@comment BSD
@deftypefun void closelog (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c closelog @asulock @aculock @acsfd
+@c libc_lock_lock @asulock @aculock
+@c closelog_internal @acsfd [always guarded by syslog_lock, so no race]
+@c close dup@acsfd
+@c cancel_handler(NULL) @aculock
+@c libc_lock_unlock @aculock
@code{closelog} closes the current Syslog connection, if there is one.
This includes closing the @file{/dev/log} socket, if it is open.
@@ -450,6 +503,10 @@ The symbols referred to in this section are declared in the file
@comment syslog.h
@comment BSD
@deftypefun int setlogmask (int @var{mask})
+@safety{@prelim{}@mtunsafe{@mtasurace{:LogMask}}@asunsafe{}@acsafe{}}
+@c Read and modify are not guarded by syslog_lock, so concurrent changes
+@c or even uses are undefined. This should use an atomic swap instead,
+@c at least for modifications.
@code{setlogmask} sets a mask (the ``logmask'') that determines which
future @code{syslog} calls shall be ignored. If a program has not
diff --git a/libc/manual/terminal.texi b/libc/manual/terminal.texi
index 9e9c05709..0f0354b1a 100644
--- a/libc/manual/terminal.texi
+++ b/libc/manual/terminal.texi
@@ -44,6 +44,9 @@ file @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int isatty (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c isatty ok
+@c tcgetattr dup ok
This function returns @code{1} if @var{filedes} is a file descriptor
associated with an open terminal device, and @math{0} otherwise.
@end deftypefun
@@ -55,6 +58,20 @@ associated file name using the @code{ttyname} function. See also the
@comment unistd.h
@comment POSIX.1
@deftypefun {char *} ttyname (int @var{filedes})
+@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c ttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
+@c isatty dup ok
+@c fstat dup ok
+@c memcpy dup ok
+@c getttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
+@c opendir @ascuheap @acsmem @acsfd
+@c readdir ok [protected by exclusive access]
+@c strcmp dup ok
+@c free dup @asulock @aculock @acsfd @acsmem
+@c malloc dup @asulock @aculock @acsfd @acsmem
+@c closedir @ascuheap @acsmem @acsfd
+@c mempcpy dup ok
+@c stat dup ok
If the file descriptor @var{filedes} is associated with a terminal
device, the @code{ttyname} function returns a pointer to a
statically-allocated, null-terminated string containing the file name of
@@ -65,6 +82,18 @@ isn't associated with a terminal, or the file name cannot be determined.
@comment unistd.h
@comment POSIX.1
@deftypefun int ttyname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+@c ttyname_r @ascuheap @acsmem @acsfd
+@c isatty dup ok
+@c fstat dup ok
+@c memcpy dup ok
+@c getttyname_r @ascuheap @acsmem @acsfd
+@c opendir @ascuheap @acsmem @acsfd
+@c readdir ok [protected by exclusive access]
+@c strcmp dup ok
+@c closedir @ascuheap @acsmem @acsfd
+@c stpncpy dup ok
+@c stat dup ok
The @code{ttyname_r} function is similar to the @code{ttyname} function
except that it places its result into the user-specified buffer starting
at @var{buf} with length @var{len}.
@@ -264,6 +293,9 @@ array.
@comment termios.h
@comment POSIX.1
@deftypefun int tcgetattr (int @var{filedes}, struct termios *@var{termios-p})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Converting the kernel-returned termios data structure to the userland
+@c format does not ensure atomic or consistent writing.
This function is used to examine the attributes of the terminal
device with file descriptor @var{filedes}. The attributes are returned
in the structure that @var{termios-p} points to.
@@ -284,6 +316,9 @@ The @var{filedes} is not associated with a terminal.
@comment termios.h
@comment POSIX.1
@deftypefun int tcsetattr (int @var{filedes}, int @var{when}, const struct termios *@var{termios-p})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Converting the incoming termios data structure to the kernel format
+@c does not ensure atomic or consistent reading.
This function sets the attributes of the terminal device with file
descriptor @var{filedes}. The new attributes are taken from the
structure that @var{termios-p} points to.
@@ -1016,6 +1051,10 @@ store them:
@comment termios.h
@comment POSIX.1
@deftypefun speed_t cfgetospeed (const struct termios *@var{termios-p})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct access to a single termios field, except on Linux, where
+@c multiple accesses may take place. No worries either way, callers
+@c must ensure mutual exclusion on such non-opaque types.
This function returns the output line speed stored in the structure
@code{*@var{termios-p}}.
@end deftypefun
@@ -1023,6 +1062,7 @@ This function returns the output line speed stored in the structure
@comment termios.h
@comment POSIX.1
@deftypefun speed_t cfgetispeed (const struct termios *@var{termios-p})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function returns the input line speed stored in the structure
@code{*@var{termios-p}}.
@end deftypefun
@@ -1030,6 +1070,7 @@ This function returns the input line speed stored in the structure
@comment termios.h
@comment POSIX.1
@deftypefun int cfsetospeed (struct termios *@var{termios-p}, speed_t @var{speed})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function stores @var{speed} in @code{*@var{termios-p}} as the output
speed. The normal return value is @math{0}; a value of @math{-1}
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed}
@@ -1039,6 +1080,7 @@ returns @math{-1}.
@comment termios.h
@comment POSIX.1
@deftypefun int cfsetispeed (struct termios *@var{termios-p}, speed_t @var{speed})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function stores @var{speed} in @code{*@var{termios-p}} as the input
speed. The normal return value is @math{0}; a value of @math{-1}
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed}
@@ -1048,6 +1090,14 @@ returns @math{-1}.
@comment termios.h
@comment BSD
@deftypefun int cfsetspeed (struct termios *@var{termios-p}, speed_t @var{speed})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c There's no guarantee that the two calls are atomic, but since this is
+@c not an opaque type, callers ought to ensure mutual exclusion to the
+@c termios object.
+
+@c cfsetspeed ok
+@c cfsetispeed ok
+@c cfsetospeed ok
This function stores @var{speed} in @code{*@var{termios-p}} as both the
input and output speeds. The normal return value is @math{0}; a value
of @math{-1} indicates an error. If @var{speed} is not a speed,
@@ -1625,6 +1675,10 @@ uses.
@comment termios.h
@comment BSD
@deftypefun void cfmakeraw (struct termios *@var{termios-p})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c There's no guarantee the changes are atomic, but since this is not an
+@c opaque type, callers ought to ensure mutual exclusion to the termios
+@c object.
This function provides an easy way to set up @code{*@var{termios-p}} for
what has traditionally been called ``raw mode'' in BSD. This uses
noncanonical input, and turns off most processing to give an unmodified
@@ -1678,6 +1732,8 @@ Various flags
@comment sgtty.h
@comment BSD
@deftypefun int gtty (int @var{filedes}, struct sgttyb *@var{attributes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct ioctl, BSD only.
This function gets the attributes of a terminal.
@code{gtty} sets *@var{attributes} to describe the terminal attributes
@@ -1687,6 +1743,8 @@ of the terminal which is open with file descriptor @var{filedes}.
@comment sgtty.h
@comment BSD
@deftypefun int stty (int @var{filedes}, const struct sgttyb *@var{attributes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct ioctl, BSD only.
This function sets the attributes of a terminal.
@@ -1710,6 +1768,12 @@ operation is performed and no signal is sent. @xref{Job Control}.
@comment termios.h
@comment POSIX.1
@deftypefun int tcsendbreak (int @var{filedes}, int @var{duration})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acunsafe{@acucorrupt{/bsd}}}
+@c On Linux, this calls just one out of two ioctls; on BSD, it's two
+@c ioctls with a select (for the delay only) in between, the first
+@c setting and the latter clearing the break status. The BSD
+@c implementation may leave the break enabled if cancelled, and threads
+@c and signals may cause the break to be interrupted before requested.
This function generates a break condition by transmitting a stream of
zero bits on the terminal associated with the file descriptor
@var{filedes}. The duration of the break is controlled by the
@@ -1738,6 +1802,8 @@ The @var{filedes} is not associated with a terminal device.
@comment termios.h
@comment POSIX.1
@deftypefun int tcdrain (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct ioctl.
The @code{tcdrain} function waits until all queued
output to the terminal @var{filedes} has been transmitted.
@@ -1772,6 +1838,8 @@ The operation was interrupted by delivery of a signal.
@comment termios.h
@comment POSIX.1
@deftypefun int tcflush (int @var{filedes}, int @var{queue})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct ioctl.
The @code{tcflush} function is used to clear the input and/or output
queues associated with the terminal file @var{filedes}. The @var{queue}
argument specifies which queue(s) to clear, and can be one of the
@@ -1822,6 +1890,11 @@ from POSIX and we cannot change it.
@comment termios.h
@comment POSIX.1
@deftypefun int tcflow (int @var{filedes}, int @var{action})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acsafe{}}
+@c Direct ioctl on Linux. On BSD, the TCO* actions are a single ioctl,
+@c whereas the TCI actions first call tcgetattr and then write to the fd
+@c the c_cc character corresponding to the action; there's a window for
+@c another thread to change the xon/xoff characters.
The @code{tcflow} function is used to perform operations relating to
XON/XOFF flow control on the terminal file specified by @var{filedes}.
@@ -1931,6 +2004,14 @@ functions are declared in the header file @file{stdlib.h}.
@comment stdlib.h
@comment GNU
@deftypefun int getpt (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+@c On BSD, tries to open multiple potential pty names, returning on the
+@c first success. On Linux, try posix_openpt first, then fallback to
+@c the BSD implementation. The posix implementation opens the ptmx
+@c device, checks with statfs that /dev/pts is a devpts or that /dev is
+@c a devfs, and returns the fd; static variables devpts_mounted and
+@c have_no_dev_ptmx are safely initialized so as to avoid repeated
+@c tests.
The @code{getpt} function returns a new file descriptor for the next
available master pseudo-terminal. The normal return value from
@code{getpt} is a non-negative integer file descriptor. In the case of
@@ -1948,6 +2029,32 @@ This function is a GNU extension.
@comment stdlib.h
@comment SVID, XPG4.2
@deftypefun int grantpt (int @var{filedes})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c unix/grantpt:pts_name @acsuheap @acsmem
+@c ptsname_internal dup ok (but this is Linux-only!)
+@c memchr dup ok
+@c realloc dup @acsuheap @acsmem
+@c malloc dup @acsuheap @acsmem
+@c free dup @acsuheap @acsmem
+@c fcntl dup ok
+@c getuid dup ok
+@c chown dup ok
+@c sysconf(_SC_GETGR_R_SIZE_MAX) ok
+@c getgrnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getgid dup ok
+@c chmod dup ok
+@c fork dup @aculock
+@c [child]
+@c setrlimit
+@c dup2
+@c CLOSE_ALL_FDS
+@c execle
+@c _exit
+@c waitpid dup ok
+@c WIFEXITED dup ok
+@c WEXITSTATUS dup ok
+@c free dup @ascuheap @acsmem
The @code{grantpt} function changes the ownership and access permission
of the slave pseudo-terminal device corresponding to the master
pseudo-terminal device associated with the file descriptor
@@ -1985,6 +2092,13 @@ with @var{filedes} could not be accessed.
@comment stdlib.h
@comment SVID, XPG4.2
@deftypefun int unlockpt (int @var{filedes})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
+@c unlockpt @ascuheap/bsd @acsmem @acsfd
+@c /bsd
+@c ptsname_r dup @ascuheap @acsmem @acsfd
+@c revoke ok (syscall)
+@c /linux
+@c ioctl dup ok
The @code{unlockpt} function unlocks the slave pseudo-terminal device
corresponding to the master pseudo-terminal device associated with the
file descriptor @var{filedes}. On many systems, the slave can only be
@@ -2008,6 +2122,9 @@ device.
@comment stdlib.h
@comment SVID, XPG4.2
@deftypefun {char *} ptsname (int @var{filedes})
+@safety{@prelim{}@mtunsafe{@mtasurace{:ptsname}}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
+@c ptsname @mtasurace:ptsname @ascuheap/bsd @acsmem @acsfd
+@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd
If the file descriptor @var{filedes} is associated with a
master pseudo-terminal device, the @code{ptsname} function returns a
pointer to a statically-allocated, null-terminated string containing the
@@ -2018,6 +2135,37 @@ might be overwritten by subsequent calls to @code{ptsname}.
@comment stdlib.h
@comment GNU
@deftypefun int ptsname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
+@c ptsname_r @ascuheap/bsd @acsmem @acsfd
+@c /hurd
+@c term_get_peername ok
+@c strlen dup ok
+@c memcpy dup ok
+@c /bsd
+@c isatty dup ok
+@c strlen dup ok
+@c ttyname_r dup @ascuheap @acsmem @acsfd
+@c stat dup ok
+@c /linux
+@c ptsname_internal ok
+@c isatty dup ok
+@c ioctl dup ok
+@c strlen dup ok
+@c itoa_word dup ok
+@c stpcpy dup ok
+@c memcpy dup ok
+@c fxstat64 dup ok
+@c MASTER_P ok
+@c major ok
+@c gnu_dev_major ok
+@c minor ok
+@c gnu_dev_minor ok
+@c minor dup ok
+@c xstat64 dup ok
+@c S_ISCHR dup ok
+@c SLAVE_P ok
+@c major dup ok
+@c minor dup ok
The @code{ptsname_r} function is similar to the @code{ptsname} function
except that it places its result into the user-specified buffer starting
at @var{buf} with length @var{len}.
@@ -2083,6 +2231,22 @@ These functions, derived from BSD, are available in the separate
@comment pty.h
@comment BSD
@deftypefun int openpty (int *@var{amaster}, int *@var{aslave}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c openpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getpt @acsfd
+@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c unlockpt dup @ascuheap/bsd @acsmem @acsfd
+@c openpty:pts_name @acsuheap @acsmem @acsfd
+@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd
+@c realloc dup @acsuheap @acsmem
+@c malloc dup @acsuheap @acsmem
+@c free dup @acsuheap @acsmem
+@c open dup @acsfd
+@c free dup @acsuheap @acsmem
+@c tcsetattr dup ok
+@c ioctl dup ok
+@c strcpy dup ok
+@c close dup @acsfd
This function allocates and opens a pseudo-terminal pair, returning the
file descriptor for the master in @var{*amaster}, and the file
descriptor for the slave in @var{*aslave}. If the argument @var{name}
@@ -2114,6 +2278,16 @@ device instead.
@comment pty.h
@comment BSD
@deftypefun int forkpty (int *@var{amaster}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c forkpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c openpty dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c fork dup @aculock
+@c close dup @acsfd
+@c /child
+@c close dup @acsfd
+@c login_tty dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
+@c _exit dup ok
+@c close dup @acsfd
This function is similar to the @code{openpty} function, but in
addition, forks a new process (@pxref{Creating a Process}) and makes the
newly opened slave pseudo-terminal device the controlling terminal
diff --git a/libc/manual/threads.texi b/libc/manual/threads.texi
index 9a5ef6a98..e088b26a1 100644
--- a/libc/manual/threads.texi
+++ b/libc/manual/threads.texi
@@ -20,9 +20,11 @@ The @glibcadj{} implements functions to allow users to create and manage
data specific to a thread. Such data may be destroyed at thread exit,
if a destructor is provided. The following functions are defined:
-@table @code
-
-@item int pthread_key_create (pthread_key_t *@var{key}, void (*@var{destructor})(void*))
+@deftypefun int pthread_key_create (pthread_key_t *@var{key}, void (*@var{destructor})(void*))
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c pthread_key_create ok
+@c KEY_UNUSED ok
+@c KEY_USABLE ok
Create a thread-specific data key for the calling thread, referenced by
@var{key}.
@@ -30,20 +32,39 @@ Objects declared with the C++11 @code{thread_local} keyword are destroyed
before thread-specific data, so they should not be used in thread-specific
data destructors or even as members of the thread-specific data, since the
latter is passed as an argument to the destructor function.
+@end deftypefun
-@item int pthread_key_delete (pthread_key_t @var{key})
+@deftypefun int pthread_key_delete (pthread_key_t @var{key})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c pthread_key_delete ok
+@c This uses atomic compare and exchange to increment the seq number
+@c after testing it's not a KEY_UNUSED seq number.
+@c KEY_UNUSED dup ok
Destroy the thread-specific data @var{key} in the calling thread. The
destructor for the thread-specific data is not called during destruction, nor
is it called during thread exit.
+@end deftypefun
-@item void *pthread_getspecific (pthread_key_t @var{key})
+@deftypefun void *pthread_getspecific (pthread_key_t @var{key})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c pthread_getspecific ok
Return the thread-specific data associated with @var{key} in the calling
thread.
+@end deftypefun
-@item int pthread_setspecific (pthread_key_t @var{key}, const void *@var{value})
+@deftypefun int pthread_setspecific (pthread_key_t @var{key}, const void *@var{value})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+@c pthread_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem
+@c a level2 block may be allocated by a signal handler after
+@c another call already made a decision to allocate it, thus losing
+@c the allocated value. the seq number is updated before the
+@c value, which might cause an earlier-generation value to seem
+@c current if setspecific is cancelled or interrupted by a signal
+@c KEY_UNUSED ok
+@c calloc dup @ascuheap @acsmem
Associate the thread-specific @var{value} with @var{key} in the calling thread.
+@end deftypefun
-@end table
@node Non-POSIX Extensions
@section Non-POSIX Extensions
@@ -64,12 +85,28 @@ the standard.
attributes used in the creation of threads in a process.
@deftypefun int pthread_getattr_default_np (pthread_attr_t *@var{attr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c Takes lock around read from default_pthread_attr.
Get the default attribute values and set @var{attr} to match. This
function returns @math{0} on success and a non-zero error code on
failure.
@end deftypefun
@deftypefun int pthread_setattr_default_np (pthread_attr_t *@var{attr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+@c pthread_setattr_default_np @ascuheap @asulock @aculock @acsmem
+@c check_sched_policy_attr ok
+@c check_sched_priority_attr ok
+@c sched_get_priority_min dup ok
+@c sched_get_priority_max dup ok
+@c check_cpuset_attr ok
+@c determine_cpumask_size ok
+@c check_stacksize_attr ok
+@c lll_lock @asulock @aculock
+@c free dup @ascuheap @acsmem
+@c realloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c lll_unlock @asulock @aculock
Set the default attribute values to match the values in @var{attr}. The
function returns @math{0} on success and a non-zero error code on failure.
The following error codes are defined for this function:
@@ -82,3 +119,124 @@ attributes or the stack address is set in the attribute.
The system does not have sufficient memory.
@end table
@end deftypefun
+
+@c FIXME these are undocumented:
+@c pthread_atfork
+@c pthread_attr_destroy
+@c pthread_attr_getaffinity_np
+@c pthread_attr_getdetachstate
+@c pthread_attr_getguardsize
+@c pthread_attr_getinheritsched
+@c pthread_attr_getschedparam
+@c pthread_attr_getschedpolicy
+@c pthread_attr_getscope
+@c pthread_attr_getstack
+@c pthread_attr_getstackaddr
+@c pthread_attr_getstacksize
+@c pthread_attr_init
+@c pthread_attr_setaffinity_np
+@c pthread_attr_setdetachstate
+@c pthread_attr_setguardsize
+@c pthread_attr_setinheritsched
+@c pthread_attr_setschedparam
+@c pthread_attr_setschedpolicy
+@c pthread_attr_setscope
+@c pthread_attr_setstack
+@c pthread_attr_setstackaddr
+@c pthread_attr_setstacksize
+@c pthread_barrierattr_destroy
+@c pthread_barrierattr_getpshared
+@c pthread_barrierattr_init
+@c pthread_barrierattr_setpshared
+@c pthread_barrier_destroy
+@c pthread_barrier_init
+@c pthread_barrier_wait
+@c pthread_cancel
+@c pthread_cleanup_push
+@c pthread_cleanup_pop
+@c pthread_condattr_destroy
+@c pthread_condattr_getclock
+@c pthread_condattr_getpshared
+@c pthread_condattr_init
+@c pthread_condattr_setclock
+@c pthread_condattr_setpshared
+@c pthread_cond_broadcast
+@c pthread_cond_destroy
+@c pthread_cond_init
+@c pthread_cond_signal
+@c pthread_cond_timedwait
+@c pthread_cond_wait
+@c pthread_create
+@c pthread_detach
+@c pthread_equal
+@c pthread_exit
+@c pthread_getaffinity_np
+@c pthread_getattr_np
+@c pthread_getconcurrency
+@c pthread_getcpuclockid
+@c pthread_getname_np
+@c pthread_getschedparam
+@c pthread_join
+@c pthread_kill
+@c pthread_kill_other_threads_np
+@c pthread_mutexattr_destroy
+@c pthread_mutexattr_getkind_np
+@c pthread_mutexattr_getprioceiling
+@c pthread_mutexattr_getprotocol
+@c pthread_mutexattr_getpshared
+@c pthread_mutexattr_getrobust
+@c pthread_mutexattr_getrobust_np
+@c pthread_mutexattr_gettype
+@c pthread_mutexattr_init
+@c pthread_mutexattr_setkind_np
+@c pthread_mutexattr_setprioceiling
+@c pthread_mutexattr_setprotocol
+@c pthread_mutexattr_setpshared
+@c pthread_mutexattr_setrobust
+@c pthread_mutexattr_setrobust_np
+@c pthread_mutexattr_settype
+@c pthread_mutex_consistent
+@c pthread_mutex_consistent_np
+@c pthread_mutex_destroy
+@c pthread_mutex_getprioceiling
+@c pthread_mutex_init
+@c pthread_mutex_lock
+@c pthread_mutex_setprioceiling
+@c pthread_mutex_timedlock
+@c pthread_mutex_trylock
+@c pthread_mutex_unlock
+@c pthread_once
+@c pthread_rwlockattr_destroy
+@c pthread_rwlockattr_getkind_np
+@c pthread_rwlockattr_getpshared
+@c pthread_rwlockattr_init
+@c pthread_rwlockattr_setkind_np
+@c pthread_rwlockattr_setpshared
+@c pthread_rwlock_destroy
+@c pthread_rwlock_init
+@c pthread_rwlock_rdlock
+@c pthread_rwlock_timedrdlock
+@c pthread_rwlock_timedwrlock
+@c pthread_rwlock_tryrdlock
+@c pthread_rwlock_trywrlock
+@c pthread_rwlock_unlock
+@c pthread_rwlock_wrlock
+@c pthread_self
+@c pthread_setaffinity_np
+@c pthread_setcancelstate
+@c pthread_setcanceltype
+@c pthread_setconcurrency
+@c pthread_setname_np
+@c pthread_setschedparam
+@c pthread_setschedprio
+@c pthread_sigmask
+@c pthread_sigqueue
+@c pthread_spin_destroy
+@c pthread_spin_init
+@c pthread_spin_lock
+@c pthread_spin_trylock
+@c pthread_spin_unlock
+@c pthread_testcancel
+@c pthread_timedjoin_np
+@c pthread_tryjoin_np
+@c pthread_yield
diff --git a/libc/manual/time.texi b/libc/manual/time.texi
index 5b6e0989d..d46d2c8f4 100644
--- a/libc/manual/time.texi
+++ b/libc/manual/time.texi
@@ -79,6 +79,7 @@ two calendar times. This function is declared in @file{time.h}.
@comment time.h
@comment ISO
@deftypefun double difftime (time_t @var{time1}, time_t @var{time0})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{difftime} function returns the number of seconds of elapsed
time between calendar time @var{time1} and calendar time @var{time0}, as
a value of type @code{double}. The difference ignores leap seconds
@@ -246,6 +247,12 @@ Values of type @code{clock_t} are numbers of clock ticks.
@comment time.h
@comment ISO
@deftypefun clock_t clock (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On Hurd, this calls task_info twice and adds user and system time
+@c from both basic and thread time info structs. On generic posix,
+@c calls times and adds utime and stime. On bsd, calls getrusage and
+@c safely converts stime and utime to clock. On linux, calls
+@c clock_gettime.
This function returns the calling process' current CPU time. If the CPU
time is not available or cannot be represented, @code{clock} returns the
value @code{(clock_t)(-1)}.
@@ -310,6 +317,12 @@ This is an obsolete name for the number of clock ticks per second. Use
@comment sys/times.h
@comment POSIX.1
@deftypefun clock_t times (struct tms *@var{buffer})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On HURD, this calls task_info twice, for basic and thread times info,
+@c adding user and system times into tms, and then gettimeofday, to
+@c compute the real time. On BSD, it calls getclktck, getrusage (twice)
+@c and time. On Linux, it's a syscall with special handling to account
+@c for clock_t counts that look like error values.
The @code{times} function stores the processor time information for
the calling process in @var{buffer}.
@@ -409,6 +422,7 @@ subtracting. @xref{Elapsed Time}.
@comment time.h
@comment ISO
@deftypefun time_t time (time_t *@var{result})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{time} function returns the current calendar time as a value of
type @code{time_t}. If the argument @var{result} is not a null pointer,
the calendar time value is also stored in @code{*@var{result}}. If the
@@ -421,6 +435,8 @@ current calendar time is not available, the value
@comment time.h
@comment SVID, XPG
@deftypefun int stime (const time_t *@var{newtime})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On unix, this is implemented in terms of settimeofday.
@code{stime} sets the system clock, i.e., it tells the system that the
current calendar time is @var{newtime}, where @code{newtime} is
interpreted as described in the above definition of @code{time_t}.
@@ -475,6 +491,12 @@ Instead, use the facilities described in @ref{Time Zone Functions}.
@comment sys/time.h
@comment BSD
@deftypefun int gettimeofday (struct timeval *@var{tp}, struct timezone *@var{tzp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On most GNU/Linux systems this is a direct syscall, but the posix/
+@c implementation (not used on GNU/Linux or GNU/Hurd) relies on time and
+@c localtime_r, saving and restoring tzname in an unsafe manner.
+@c On some GNU/Linux variants, ifunc resolvers are used in shared libc
+@c for vdso resolution. ifunc-vdso-revisit.
The @code{gettimeofday} function returns the current calendar time as
the elapsed time since the epoch in the @code{struct timeval} structure
indicated by @var{tp}. (@pxref{Elapsed Time} for a description of
@@ -498,6 +520,9 @@ Instead, use the facilities described in @ref{Time Zone Functions}.
@comment sys/time.h
@comment BSD
@deftypefun int settimeofday (const struct timeval *@var{tp}, const struct timezone *@var{tzp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On HURD, it calls host_set_time with a privileged port. On other
+@c unix systems, it's a syscall.
The @code{settimeofday} function sets the current calendar time in the
system clock according to the arguments. As for @code{gettimeofday},
the calendar time is represented as the elapsed time since the epoch.
@@ -539,6 +564,10 @@ The operating system does not support setting time zone information, and
@comment sys/time.h
@comment BSD
@deftypefun int adjtime (const struct timeval *@var{delta}, struct timeval *@var{olddelta})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On hurd and mach, call host_adjust_time with a privileged port. On
+@c Linux, it's implemented in terms of adjtimex. On other unixen, it's
+@c a syscall.
This function speeds up or slows down the system clock in order to make
a gradual adjustment. This ensures that the calendar time reported by
the system clock is always monotonically increasing, which might not
@@ -577,6 +606,8 @@ Symbols for the following function are declared in @file{sys/timex.h}.
@comment sys/timex.h
@comment GNU
@deftypefun int adjtimex (struct timex *@var{timex})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c It's a syscall, only available on linux.
@code{adjtimex} is functionally identical to @code{ntp_adjtime}.
@xref{High Accuracy Clock}.
@@ -674,6 +705,10 @@ GNU extension, and is not visible in a strict @w{ISO C} environment.
@comment time.h
@comment ISO
@deftypefun {struct tm *} localtime (const time_t *@var{time})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c Calls tz_convert with a static buffer.
+@c localtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The @code{localtime} function converts the simple time pointed to by
@var{time} to broken-down time representation, expressed relative to the
user's specified time zone.
@@ -698,6 +733,87 @@ all threads. POSIX.1c introduced a variant of this function.
@comment time.h
@comment POSIX.1c
@deftypefun {struct tm *} localtime_r (const time_t *@var{time}, struct tm *@var{resultp})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c localtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tz_convert(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c tzset_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c always called with tzset_lock held
+@c sets static is_initialized before initialization;
+@c reads and sets old_tz; sets tz_rules.
+@c some of the issues only apply on the first call.
+@c subsequent calls only trigger these when called by localtime;
+@c otherwise, they're ok.
+@c getenv dup @mtsenv
+@c strcmp dup ok
+@c strdup @ascuheap
+@c tzfile_read @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c memcmp dup ok
+@c strstr dup ok
+@c getenv dup @mtsenv
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c stat64 dup ok
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fileno dup ok
+@c fstat64 dup ok
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c free dup @ascuheap @acsmem
+@c fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
+@c fread_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
+@c memcpy dup ok
+@c decode ok
+@c bswap_32 dup ok
+@c fseek dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
+@c ftello dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
+@c malloc dup @ascuheap @acsmem
+@c decode64 ok
+@c bswap_64 dup ok
+@c getc_unlocked ok [no @mtasurace:stream @asucorrupt @acucorrupt]
+@c tzstring dup @ascuheap @acsmem
+@c compute_tzname_max dup ok [guarded by tzset_lock]
+@c memset dup ok
+@c update_vars ok [guarded by tzset_lock]
+@c sets daylight, timezone, tzname and tzname_cur_max;
+@c called only with tzset_lock held, unless tzset_parse_tz
+@c (internal, but not static) gets called by users; given the its
+@c double-underscore-prefixed name, this interface violation could
+@c be regarded as undefined behavior.
+@c strlen ok
+@c tzset_parse_tz @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c sscanf dup @mtslocale @ascuheap @acsmem
+@c isalnum dup @mtsenv
+@c tzstring @ascuheap @acsmem
+@c reads and changes tzstring_list without synchronization, but
+@c only called with tzset_lock held (save for interface violations)
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c strcpy dup ok
+@c isdigit dup @mtslocale
+@c compute_offset ok
+@c tzfile_default @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c sets tzname, timezone, types, zone_names, rule_*off, etc; no guards
+@c strlen dup ok
+@c tzfile_read dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c mempcpy dup ok
+@c compute_tzname_max ok [if guarded by tzset_lock]
+@c iterates over zone_names; no guards
+@c free dup @ascuheap @acsmem
+@c strtoul dup @mtslocale
+@c update_vars dup ok
+@c tzfile_compute(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c sets tzname; no guards. with !use_localtime, as in gmtime, it's ok
+@c tzstring dup @acsuheap @acsmem
+@c tzset_parse_tz dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c offtime dup ok
+@c tz_compute dup ok
+@c strcmp dup ok
+@c offtime ok
+@c isleap dup ok
+@c tz_compute ok
+@c compute_change ok
+@c isleap ok
+@c libc_lock_unlock dup @aculock
+
The @code{localtime_r} function works just like the @code{localtime}
function. It takes a pointer to a variable containing a simple time
and converts it to the broken-down time format.
@@ -714,6 +830,9 @@ object the result was written into, i.e., it returns @var{resultp}.
@comment time.h
@comment ISO
@deftypefun {struct tm *} gmtime (const time_t *@var{time})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c gmtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
This function is similar to @code{localtime}, except that the broken-down
time is expressed as Coordinated Universal Time (UTC) (formerly called
Greenwich Mean Time (GMT)) rather than relative to a local time zone.
@@ -727,6 +846,15 @@ is placed in a static variable. POSIX.1c also provides a replacement for
@comment time.h
@comment POSIX.1c
@deftypefun {struct tm *} gmtime_r (const time_t *@var{time}, struct tm *@var{resultp})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c You'd think tz_convert could avoid some safety issues with
+@c !use_localtime, but no such luck: tzset_internal will always bring
+@c about all possible AS and AC problems when it's first called.
+@c Calling any of localtime,gmtime_r once would run the initialization
+@c and avoid the heap, mem and fd issues in gmtime* in subsequent calls,
+@c but the unsafe locking would remain.
+@c gmtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tz_convert(gmtime_r) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
This function is similar to @code{localtime_r}, except that it converts
just like @code{gmtime} the given time as Coordinated Universal Time.
@@ -738,6 +866,29 @@ object the result was written into, i.e., it returns @var{resultp}.
@comment time.h
@comment ISO
@deftypefun time_t mktime (struct tm *@var{brokentime})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c mktime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c passes a static localtime_offset to mktime_internal; it is read
+@c once, used as an initial guess, and updated at the end, but not
+@c used except as a guess for subsequent calls, so it should be safe.
+@c Even though a compiler might delay the load and perform it multiple
+@c times (bug 16346), there are at least two unconditional uses of the
+@c auto variable in which the first load is stored, separated by a
+@c call to an external function, and a conditional change of the
+@c variable before the external call, so refraining from allocating a
+@c local variable at the first load would be a very bad optimization.
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c mktime_internal(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c ydhms_diff ok
+@c ranged_convert(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c *convert = localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c time_t_avg dup ok
+@c guess_time_tm dup ok
+@c ydhms_diff dup ok
+@c time_t_add_ok ok
+@c time_t_avg ok
+@c isdst_differ ok
+@c time_t_int_add_ok ok
The @code{mktime} function converts a broken-down time structure to a
simple time representation. It also normalizes the contents of the
broken-down time structure, and fills in some components based on the
@@ -765,6 +916,8 @@ members. @xref{Time Zone Functions}.
@comment time.h
@comment ???
@deftypefun time_t timelocal (struct tm *@var{brokentime})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c Alias to mktime.
@code{timelocal} is functionally identical to @code{mktime}, but more
mnemonically named. Note that it is the inverse of the @code{localtime}
@@ -778,6 +931,19 @@ available. @code{timelocal} is rather rare.
@comment time.h
@comment ???
@deftypefun time_t timegm (struct tm *@var{brokentime})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c timegm @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c gmtime_offset triggers the same caveats as localtime_offset in mktime.
+@c although gmtime_r, as called by mktime, might save some issues,
+@c tzset calls tzset_internal with always, which forces
+@c reinitialization, so all issues may arise.
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c mktime_internal(gmtime_r) @asulock @aculock
+@c ..gmtime_r @asulock @aculock
+@c ... dup ok
+@c tz_convert(!use_localtime) @asulock @aculock
+@c ... dup @asulock @aculock
+@c tzfile_compute(!use_localtime) ok
@code{timegm} is functionally identical to @code{mktime} except it
always takes the input values to be Coordinated Universal Time (UTC)
@@ -839,6 +1005,8 @@ system clock from the true calendar time.
@comment sys/timex.h
@comment GNU
@deftypefun int ntp_gettime (struct ntptimeval *@var{tptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Wrapper for adjtimex.
The @code{ntp_gettime} function sets the structure pointed to by
@var{tptr} to current values. The elements of the structure afterwards
contain the values the timer implementation in the kernel assumes. They
@@ -956,6 +1124,8 @@ exceeded the threshold.
@comment sys/timex.h
@comment GNU
@deftypefun int ntp_adjtime (struct timex *@var{tptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Alias to adjtimex syscall.
The @code{ntp_adjtime} function sets the structure specified by
@var{tptr} to current values.
@@ -1010,6 +1180,13 @@ strings. These functions are declared in the header file @file{time.h}.
@comment time.h
@comment ISO
@deftypefun {char *} asctime (const struct tm *@var{brokentime})
+@safety{@prelim{}@mtunsafe{@mtasurace{:asctime} @mtslocale{}}@asunsafe{}@acsafe{}}
+@c asctime @mtasurace:asctime @mtslocale
+@c Uses a static buffer.
+@c asctime_internal @mtslocale
+@c snprintf dup @mtslocale [no @acsuheap @acsmem]
+@c ab_day_name @mtslocale
+@c ab_month_name @mtslocale
The @code{asctime} function converts the broken-down time value that
@var{brokentime} points to into a string in a standard format:
@@ -1033,6 +1210,9 @@ string.)
@comment time.h
@comment POSIX.1c
@deftypefun {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c asctime_r @mtslocale
+@c asctime_internal dup @mtslocale
This function is similar to @code{asctime} but instead of placing the
result in a static buffer it writes the string in the buffer pointed to
by the parameter @var{buffer}. This buffer should have room
@@ -1047,6 +1227,10 @@ return @code{NULL}.
@comment time.h
@comment ISO
@deftypefun {char *} ctime (const time_t *@var{time})
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtasurace{:asctime} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c ctime @mtasurace:tmbuf @mtasurace:asctime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c localtime dup @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c asctime dup @mtasurace:asctime @mtslocale
The @code{ctime} function is similar to @code{asctime}, except that you
specify the calendar time argument as a @code{time_t} simple time value
rather than in broken-down local time format. It is equivalent to
@@ -1062,6 +1246,10 @@ Calling @code{ctime} also sets the current time zone as if
@comment time.h
@comment POSIX.1c
@deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c ctime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c asctime_r dup @mtslocale
This function is similar to @code{ctime}, but places the result in the
string pointed to by @var{buffer}. It is equivalent to (written using
gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}):
@@ -1079,6 +1267,63 @@ return @code{NULL}.
@comment time.h
@comment ISO
@deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c strftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c strftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c strftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c add ok
+@c memset_zero dup ok
+@c memset_space dup ok
+@c strlen dup ok
+@c mbrlen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
+@c mbsinit dup ok
+@c cpy ok
+@c add dup ok
+@c memcpy_lowcase ok
+@c TOLOWER ok
+@c tolower_l ok
+@c memcpy_uppcase ok
+@c TOUPPER ok
+@c toupper_l ok
+@c MEMCPY ok
+@c memcpy dup ok
+@c ISDIGIT ok
+@c STRLEN ok
+@c strlen dup ok
+@c strftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c TOUPPER dup ok
+@c nl_get_era_entry @ascuheap @asulock @acsmem @aculock
+@c nl_init_era_entries @ascuheap @asulock @acsmem @aculock
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c memset dup ok
+@c free dup @ascuheap @acsmem
+@c realloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c strchr dup ok
+@c wcschr dup ok
+@c libc_rwlock_unlock dup @asulock @aculock
+@c ERA_DATE_CMP ok
+@c DO_NUMBER ok
+@c DO_NUMBER_SPACEPAD ok
+@c nl_get_alt_digit @ascuheap @asulock @acsmem @aculock
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c nl_init_alt_digit @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c memset dup ok
+@c strchr dup ok
+@c libc_rwlock_unlock dup @aculock
+@c memset_space ok
+@c memset dup ok
+@c memset_zero ok
+@c memset dup ok
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c iso_week_days ok
+@c isleap ok
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tm_diff ok
This function is similar to the @code{sprintf} function (@pxref{Formatted
Input}), but the conversion specifications that can appear in the format
template @var{template} are specialized for printing components of the date
@@ -1406,6 +1651,53 @@ For an example of @code{strftime}, see @ref{Time Functions Example}.
@comment time.h
@comment ISO/Amend1
@deftypefun size_t wcsftime (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, const struct tm *@var{brokentime})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+@c wcsftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c wcsftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c wcsftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c add ok
+@c memset_zero dup ok
+@c memset_space dup ok
+@c wcslen dup ok
+@c cpy ok
+@c add dup ok
+@c memcpy_lowcase ok
+@c TOLOWER ok
+@c towlower_l dup ok
+@c memcpy_uppcase ok
+@c TOUPPER ok
+@c towupper_l dup ok
+@c MEMCPY ok
+@c wmemcpy dup ok
+@c widen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c memset dup ok
+@c mbsrtowcs_l @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
+@c ISDIGIT ok
+@c STRLEN ok
+@c wcslen dup ok
+@c wcsftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+@c TOUPPER dup ok
+@c nl_get_era_entry dup @ascuheap @asulock @acsmem @aculock
+@c DO_NUMBER ok
+@c DO_NUMBER_SPACEPAD ok
+@c nl_get_walt_digit dup @ascuheap @asulock @acsmem @aculock
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c nl_init_alt_digit dup @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c memset dup ok
+@c wcschr dup ok
+@c libc_rwlock_unlock dup @aculock
+@c memset_space ok
+@c wmemset dup ok
+@c memset_zero ok
+@c wmemset dup ok
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c iso_week_days ok
+@c isleap ok
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c tm_diff ok
The @code{wcsftime} function is equivalent to the @code{strftime}
function with the difference that it operates on wide character
strings. The buffer where the result is stored, pointed to by @var{s},
@@ -1456,6 +1748,32 @@ which is defined and implemented in terms of calls to @code{strptime}.
@comment time.h
@comment XPG4
@deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c strptime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c strptime_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c memset dup ok
+@c ISSPACE ok
+@c isspace_l dup ok
+@c match_char ok
+@c match_string ok
+@c strlen dup ok
+@c strncasecmp_l dup ok
+@c strcmp dup ok
+@c recursive @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c strptime_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c get_number ok
+@c ISSPACE dup ok
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nl_select_era_entry @ascuheap @asulock @acsmem @aculock
+@c nl_init_era_entries dup @ascuheap @asulock @acsmem @aculock
+@c get_alt_number dup @ascuheap @asulock @acsmem @aculock
+@c nl_parse_alt_digit dup @ascuheap @asulock @acsmem @aculock
+@c libc_rwlock_wrlock dup @asulock @aculock
+@c nl_init_alt_digit dup @ascuheap @acsmem
+@c libc_rwlock_unlock dup @aculock
+@c get_number dup ok
+@c day_of_the_week ok
+@c day_of_the_year ok
The @code{strptime} function parses the input string @var{s} according
to the format string @var{fmt} and stores its results in the
structure @var{tp}.
@@ -1869,6 +2187,9 @@ in a @code{time_t} variable.
@comment time.h
@comment Unix98
@deftypefun {struct tm *} getdate (const char *@var{string})
+@safety{@prelim{}@mtunsafe{@mtasurace{:getdate} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c getdate @mtasurace:getdate @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c getdate_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The interface to @code{getdate} is the simplest possible for a function
to parse a string and return the value. @var{string} is the input
string and the result is returned in a statically-allocated variable.
@@ -1980,6 +2301,30 @@ any arbitrary file and chances are high that with some bogus input
@comment time.h
@comment GNU
@deftypefun int getdate_r (const char *@var{string}, struct tm *@var{tp})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c getdate_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c getenv dup @mtsenv
+@c stat64 dup ok
+@c access dup ok
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
+@c isspace dup @mtslocale
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c memcpy dup ok
+@c getline dup @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt, exclusive]
+@c strptime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c feof_unlocked dup ok
+@c free dup @ascuheap @acsmem
+@c ferror_unlocked dup dup ok
+@c time dup ok
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c first_wday @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c memset dup ok
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c check_mday ok
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
The @code{getdate_r} function is the reentrant counterpart of
@code{getdate}. It does not use the global variable @code{getdate_err}
to signal an error, but instead returns an error code. The same error
@@ -2215,6 +2560,11 @@ lead to trouble.
@comment time.h
@comment POSIX.1
@deftypefun void tzset (void)
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c tzset @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c tzset_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_unlock dup @aculock
The @code{tzset} function initializes the @code{tzname} variable from
the value of the @code{TZ} environment variable. It is not usually
necessary for your program to call this function, because it is called
@@ -2353,6 +2703,15 @@ The @code{struct timeval} data type is described in @ref{Elapsed Time}.
@comment sys/time.h
@comment BSD
@deftypefun int setitimer (int @var{which}, const struct itimerval *@var{new}, struct itimerval *@var{old})
+@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
+@c This function is marked with @mtstimer because the same set of timers
+@c is shared by all threads of a process, so calling it in one thread
+@c may interfere with timers set by another thread. This interference
+@c is not regarded as destructive, because the interface specification
+@c makes this overriding while returning the previous value the expected
+@c behavior, and the kernel will serialize concurrent calls so that the
+@c last one prevails, with each call getting the timer information from
+@c the timer installed by the previous call in that serialization.
The @code{setitimer} function sets the timer specified by @var{which}
according to @var{new}. The @var{which} argument can have a value of
@code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}.
@@ -2373,6 +2732,7 @@ The timer period is too large.
@comment sys/time.h
@comment BSD
@deftypefun int getitimer (int @var{which}, struct itimerval *@var{old})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getitimer} function stores information about the timer specified
by @var{which} in the structure pointed at by @var{old}.
@@ -2405,6 +2765,8 @@ timer.
@comment unistd.h
@comment POSIX.1
@deftypefun {unsigned int} alarm (unsigned int @var{seconds})
+@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
+@c Wrapper for setitimer.
The @code{alarm} function sets the real-time timer to expire in
@var{seconds} seconds. If you want to cancel any existing alarm, you
can do this by calling @code{alarm} with a @var{seconds} argument of
@@ -2464,6 +2826,10 @@ any descriptors to wait for.
@comment unistd.h
@comment POSIX.1
@deftypefun {unsigned int} sleep (unsigned int @var{seconds})
+@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}}
+@c On Mach, it uses ports and calls time. On generic posix, it calls
+@c nanosleep. On Linux, it temporarily blocks SIGCHLD, which is MT- and
+@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!).
The @code{sleep} function waits for @var{seconds} or until a signal
is delivered, whichever happens first.
@@ -2508,6 +2874,9 @@ the same program, because @code{sleep} does not work by means of
@comment time.h
@comment POSIX.1
@deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c On Linux, it's a syscall. On Mach, it calls gettimeofday and uses
+@c ports.
If resolution to seconds is not enough the @code{nanosleep} function can
be used. As the name suggests the sleep interval can be specified in
nanoseconds. The actual elapsed time of the sleep interval might be
diff --git a/libc/manual/users.texi b/libc/manual/users.texi
index 957e34659..93b25ebcf 100644
--- a/libc/manual/users.texi
+++ b/libc/manual/users.texi
@@ -221,30 +221,37 @@ This is an integer data type used to represent group IDs. In
@comment unistd.h
@comment POSIX.1
@deftypefun uid_t getuid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Atomic syscall, except on hurd, where it takes a lock within a hurd
+@c critical section.
The @code{getuid} function returns the real user ID of the process.
@end deftypefun
@comment unistd.h
@comment POSIX.1
@deftypefun gid_t getgid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getgid} function returns the real group ID of the process.
@end deftypefun
@comment unistd.h
@comment POSIX.1
@deftypefun uid_t geteuid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{geteuid} function returns the effective user ID of the process.
@end deftypefun
@comment unistd.h
@comment POSIX.1
@deftypefun gid_t getegid (void)
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getegid} function returns the effective group ID of the process.
@end deftypefun
@comment unistd.h
@comment POSIX.1
@deftypefun int getgroups (int @var{count}, gid_t *@var{groups})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The @code{getgroups} function is used to inquire about the supplementary
group IDs of the process. Up to @var{count} of these group IDs are
stored in the array @var{groups}; the return value from the function is
@@ -291,6 +298,34 @@ include the header files @file{sys/types.h} and @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int seteuid (uid_t @var{neweuid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c seteuid @asulock @aculock
+@c INLINE_SETXID_SYSCALL @asulock @aculock
+@c This may be just a unix syscall, or the ugliness below used by
+@c nptl to propagate the syscall to all cloned processes used to
+@c implement threads.
+@c nptl_setxid @asulock @aculock
+@c while holding the stack_alloc_lock, mark with SETXID_BITMASK all
+@c threads that are not exiting, signal them until no thread remains
+@c marked, clear the marks and run the syscall, then release the lock.
+@c lll_lock @asulock @aculock
+@c list_for_each ok
+@c list_entry ok
+@c setxid_mark_thread ok
+@c if a thread is initializing, wait for it to be cloned.
+@c mark it with SETXID_BITMASK if it's not exiting
+@c setxid_signal_thread ok
+@c if a thread is marked with SETXID_BITMASK,
+@c send it the SIGSETXID signal
+@c setxid_unmark_thread ok
+@c clear SETXID_BITMASK and release the futex if SETXID_BITMASK is
+@c set.
+@c <syscall> ok
+@c lll_unlock @aculock
+@c
+@c sighandler_setxid ok
+@c issue the syscall, clear SETXID_BITMASK, release the futex, and
+@c wake up the signaller loop if the counter reached zero.
This function sets the effective user ID of a process to @var{neweuid},
provided that the process is allowed to change its effective user ID. A
privileged process (effective user ID zero) can change its effective
@@ -318,6 +353,9 @@ have this function.
@comment unistd.h
@comment POSIX.1
@deftypefun int setuid (uid_t @var{newuid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setuid @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
If the calling process is privileged, this function sets both the real
and effective user ID of the process to @var{newuid}. It also deletes
the file user ID of the process, if any. @var{newuid} may be any
@@ -334,6 +372,9 @@ The return values and error conditions are the same as for @code{seteuid}.
@comment unistd.h
@comment BSD
@deftypefun int setreuid (uid_t @var{ruid}, uid_t @var{euid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setreuid @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
This function sets the real user ID of the process to @var{ruid} and the
effective user ID to @var{euid}. If @var{ruid} is @code{-1}, it means
not to change the real user ID; likewise if @var{euid} is @code{-1}, it
@@ -369,6 +410,9 @@ the header files @file{sys/types.h} and @file{unistd.h}.
@comment unistd.h
@comment POSIX.1
@deftypefun int setegid (gid_t @var{newgid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setegid @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
This function sets the effective group ID of the process to
@var{newgid}, provided that the process is allowed to change its group
ID. Just as with @code{seteuid}, if the process is privileged it may
@@ -388,6 +432,9 @@ This function is only present if @code{_POSIX_SAVED_IDS} is defined.
@comment unistd.h
@comment POSIX.1
@deftypefun int setgid (gid_t @var{newgid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setgid @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
This function sets both the real and effective group ID of the process
to @var{newgid}, provided that the process is privileged. It also
deletes the file group ID, if any.
@@ -402,6 +449,9 @@ as those for @code{seteuid}.
@comment unistd.h
@comment BSD
@deftypefun int setregid (gid_t @var{rgid}, gid_t @var{egid})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setregid @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
This function sets the real group ID of the process to @var{rgid} and
the effective group ID to @var{egid}. If @var{rgid} is @code{-1}, it
means not to change the real group ID; likewise if @var{egid} is
@@ -438,6 +488,9 @@ should include the header file @file{grp.h}.
@comment grp.h
@comment BSD
@deftypefun int setgroups (size_t @var{count}, const gid_t *@var{groups})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+@c setgroups @asulock @aculock
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock
This function sets the process's supplementary group IDs. It can only
be called from privileged processes. The @var{count} argument specifies
the number of group IDs in the array @var{groups}.
@@ -455,6 +508,36 @@ The calling process is not privileged.
@comment grp.h
@comment BSD
@deftypefun int initgroups (const char *@var{user}, gid_t @var{group})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}}
+@c initgroups @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c sysconf(_SC_NGROUPS_MAX) dup @acsfd
+@c MIN dup ok
+@c malloc @ascuheap @acsmem
+@c internal_getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getgrouplist @ascuheap @acsfd @acsmem
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c nscd_open_socket dup @acsfd
+@c realloc dup @ascuheap @acsmem
+@c readall dup ok
+@c memcpy dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c compat_call @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c sysconf(_SC_GETGR_R_SIZE_MAX) ok
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *getgrent_fct @ascuplugin
+@c *setgrent_fct @ascuplugin
+@c *endgrent_fct @ascuplugin
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c *initgroups_dyn_fct @ascuplugin
+@c nss_next_action dup ok
+@c setgroups dup @asulock @aculock
+@c free dup @ascuheap @acsmem
The @code{initgroups} function sets the process's supplementary group
IDs to be the normal default for the user name @var{user}. The group
@var{group} is automatically included.
@@ -476,6 +559,13 @@ include the header file @file{grp.h}.
@comment grp.h
@comment BSD
@deftypefun int getgrouplist (const char *@var{user}, gid_t @var{group}, gid_t *@var{groups}, int *@var{ngroups})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}}
+@c getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c MAX dup ok
+@c malloc dup @ascuheap @acsmem
+@c internal_getgrouplist dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c memcpy dup ok
+@c free dup @ascuheap @acsmem
The @code{getgrouplist} function scans the group database for all the
groups @var{user} belongs to. Up to *@var{ngroups} group IDs
corresponding to these groups are stored in the array @var{groups}; the
@@ -792,6 +882,41 @@ The @code{getlogin} function is declared in @file{unistd.h}, while
@comment unistd.h
@comment POSIX.1
@deftypefun {char *} getlogin (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:getlogin} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getlogin (linux) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getlogin_r_loginuid dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getlogin_fd0 (unix) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
+@c uses static buffer name => @mtasurace:getlogin
+@c ttyname_r dup @ascuheap @acsmem @acsfd
+@c strncpy dup ok
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c endutent dup @mtasurace:utent @asulock @aculock
+@c libc_lock_unlock dup ok
+@c strlen dup ok
+@c memcpy dup ok
+@c
+@c getlogin_r (linux) @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getlogin_r_loginuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c open_not_cancel_2 dup @acsfd
+@c read_not_cancel dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c strtoul @mtslocale
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @asulock @aculock @acsfd @acsmem
+@c strlen dup ok
+@c memcpy dup ok
+@c free dup @asulock @aculock @acsfd @acsmem
+@c getlogin_r_fd0 (unix) @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd
+@c ttyname_r dup @ascuheap @acsmem @acsfd
+@c strncpy dup ok
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->setutent dup @mtasurace:utent @acsfd
+@c *libc_utmp_jump_table->getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer
+@c *libc_utmp_jump_table->endutent dup @mtasurace:utent @asulock @aculock
+@c libc_lock_unlock dup ok
+@c strlen dup ok
+@c memcpy dup ok
The @code{getlogin} function returns a pointer to a string containing the
name of the user logged in on the controlling terminal of the process,
or a null pointer if this information cannot be determined. The string
@@ -802,6 +927,11 @@ this function or to @code{cuserid}.
@comment stdio.h
@comment POSIX.1
@deftypefun {char *} cuserid (char *@var{string})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c cuserid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c geteuid dup ok
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c strncpy dup ok
The @code{cuserid} function returns a pointer to a string containing a
user name associated with the effective ID of the process. If
@var{string} is not a null pointer, it should be an array that can hold
@@ -1013,6 +1143,22 @@ compatibility only, @file{utmp.h} defines @code{ut_time} as an alias for
@comment utmp.h
@comment SVID
@deftypefun void setutent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c Besides the static variables in utmp_file.c, there's the jump_table.
+@c They're both modified while holding a lock, but other threads may
+@c cause the variables to be modified between calling this function and
+@c others that rely on the internal state it sets up.
+
+@c setutent @mtasurace:utent @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->setutent @mtasurace:utent @acsfd
+@c setutent_unknown @mtasurace:utent @acsfd
+@c *libc_utmp_file_functions.setutent = setutent_file @mtasurace:utent @acsfd
+@c open_not_cancel_2 dup @acsfd
+@c fcntl_not_cancel dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c lseek64 dup ok
+@c libc_lock_unlock dup ok
This function opens the user accounting database to begin scanning it.
You can then call @code{getutent}, @code{getutid} or @code{getutline} to
read entries and @code{pututline} to write entries.
@@ -1024,6 +1170,14 @@ the database.
@comment utmp.h
@comment SVID
@deftypefun {struct utmp *} getutent (void)
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtasurace{:utentbuf} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c The static buffer that holds results is allocated with malloc at
+@c the first call; the test is not thread-safe, so multiple concurrent
+@c calls could malloc multiple buffers.
+
+@c getutent @mtuinit @mtasurace:utent @mtasurace:utentbuf @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
+@c malloc @asulock @aculock @acsfd @acsmem
+@c getutent_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
The @code{getutent} function reads the next entry from the user
accounting database. It returns a pointer to the entry, which is
statically allocated and may be overwritten by subsequent calls to
@@ -1037,12 +1191,27 @@ A null pointer is returned in case no further entry is available.
@comment utmp.h
@comment SVID
@deftypefun void endutent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c endutent @mtasurace:utent @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->endutent @mtasurace:utent @acsfd
+@c endutent_unknown ok
+@c endutent_file @mtasurace:utent @acsfd
+@c close_not_cancel_no_status dup @acsfd
+@c libc_lock_unlock dup ok
This function closes the user accounting database.
@end deftypefun
@comment utmp.h
@comment SVID
@deftypefun {struct utmp *} getutid (const struct utmp *@var{id})
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+@c Same caveats as getutline.
+@c
+@c getutid @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd
+@c uses a static buffer malloced on the first call
+@c malloc dup @ascuheap @acsmem
+@c getutid_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
This function searches forward from the current point in the database
for an entry that matches @var{id}. If the @code{ut_type} member of the
@var{id} structure is one of @code{RUN_LVL}, @code{BOOT_TIME},
@@ -1073,6 +1242,14 @@ over again.
@comment utmp.h
@comment SVID
@deftypefun {struct utmp *} getutline (const struct utmp *@var{line})
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c The static buffer that holds results is allocated with malloc at
+@c the first call; the test is not thread-safe, so multiple concurrent
+@c calls could malloc multiple buffers.
+
+@c getutline @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
+@c malloc @asulock @aculock @acsfd @acsmem
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
This function searches forward from the current point in the database
until it finds an entry whose @code{ut_type} value is
@code{LOGIN_PROCESS} or @code{USER_PROCESS}, and whose @code{ut_line}
@@ -1095,6 +1272,29 @@ over again.
@comment utmp.h
@comment SVID
@deftypefun {struct utmp *} pututline (const struct utmp *@var{utmp})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
+@c pututline_unknown @mtasurace:utent @acsfd
+@c setutent_unknown dup @mtasurace:utent @acsfd
+@c pututline_file @mtascusig:ALRM @mtascutimer @acsfd
+@c TRANSFORM_UTMP_FILE_NAME ok
+@c strcmp dup ok
+@c acesss dup ok
+@c open_not_cancel_2 dup @acsfd
+@c fcntl_not_cancel dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c llseek dup ok
+@c dup2 dup ok
+@c utmp_equal dup ok
+@c internal_getut_r dup @mtascusig:ALRM @mtascutimer
+@c LOCK_FILE dup @mtascusig:ALRM @mtasctimer
+@c LOCKING_FAILED dup ok
+@c ftruncate64 dup ok
+@c write_not_cancel dup ok
+@c UNLOCK_FILE dup @mtasctimer
+@c libc_lock_unlock dup @aculock
The @code{pututline} function inserts the entry @code{*@var{utmp}} at
the appropriate place in the user accounting database. If it finds that
it is not already at the correct place in the database, it uses
@@ -1125,6 +1325,27 @@ user-provided buffer.
@comment utmp.h
@comment GNU
@deftypefun int getutent_r (struct utmp *@var{buffer}, struct utmp **@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
+@c getutent_r_unknown @mtasurace:utent @acsfd
+@c setutent_unknown dup @mtasurace:utent @acsfd
+@c getutent_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer
+@c LOCK_FILE @mtascusig:ALRM @mtascutimer
+@c alarm dup @mtascutimer
+@c sigemptyset dup ok
+@c sigaction dup ok
+@c memset dup ok
+@c fcntl_not_cancel dup ok
+@c LOCKING_FAILED ok
+@c read_not_cancel dup ok
+@c UNLOCK_FILE @mtascutimer
+@c fcntl_not_cancel dup ok
+@c alarm dup @mtascutimer
+@c sigaction dup ok
+@c memcpy dup ok
+@c libc_lock_unlock dup ok
The @code{getutent_r} is equivalent to the @code{getutent} function. It
returns the next entry from the database. But instead of storing the
information in a static buffer it stores it in the buffer pointed to by
@@ -1142,6 +1363,22 @@ This function is a GNU extension.
@comment utmp.h
@comment GNU
@deftypefun int getutid_r (const struct utmp *@var{id}, struct utmp *@var{buffer}, struct utmp **@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
+@c getutid_r_unknown @mtasurace:utent @acsfd
+@c setutent_unknown dup @mtasurace:utent @acsfd
+@c getutid_r_file @mtascusig:ALRM @mtascutimer
+@c internal_getut_r @mtascusig:ALRM @mtascutimer
+@c LOCK_FILE dup @mtascusig:ALRM @mtascutimer
+@c LOCKING_FAILED dup ok
+@c read_not_cancel dup ok
+@c utmp_equal ok
+@c strncmp dup ok
+@c UNLOCK_FILE dup @mtascutimer
+@c memcpy dup ok
+@c libc_lock_unlock dup @aculock
This function retrieves just like @code{getutid} the next entry matching
the information stored in @var{id}. But the result is stored in the
buffer pointed to by the parameter @var{buffer}.
@@ -1157,6 +1394,28 @@ This function is a GNU extension.
@comment utmp.h
@comment GNU
@deftypefun int getutline_r (const struct utmp *@var{line}, struct utmp *@var{buffer}, struct utmp **@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
+@c getutline_r_unknown @mtasurace:utent @acsfd
+@c setutent_unknown dup @mtasurace:utent @acsfd
+@c getutline_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer
+@c LOCK_FILE @mtascusig:ALRM @mtascutimer
+@c alarm dup @mtascutimer
+@c sigemptyset dup ok
+@c sigaction dup ok
+@c memset dup ok
+@c fcntl_not_cancel dup ok
+@c LOCKING_FAILED ok
+@c read_not_cancel dup ok
+@c strncmp dup ok
+@c UNLOCK_FILE @mtascutimer
+@c fcntl_not_cancel dup ok
+@c alarm dup @mtascutimer
+@c sigaction dup ok
+@c memcpy dup ok
+@c libc_lock_unlock dup ok
This function retrieves just like @code{getutline} the next entry
matching the information stored in @var{line}. But the result is stored
in the buffer pointed to by the parameter @var{buffer}.
@@ -1180,6 +1439,14 @@ be used.
@comment utmp.h
@comment SVID
@deftypefun int utmpname (const char *@var{file})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+@c utmpname @mtasurace:utent @asulock @ascuheap @aculock @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c *libc_utmp_jump_table->endutent dup @mtasurace:utent
+@c strcmp dup ok
+@c free dup @ascuheap @acsmem
+@c strdup dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
The @code{utmpname} function changes the name of the database to be
examined to @var{file}, and closes any previously opened database. By
default @code{getutent}, @code{getutid}, @code{getutline} and
@@ -1208,6 +1475,18 @@ the following function:
@comment utmp.h
@comment SVID
@deftypefun void updwtmp (const char *@var{wtmp_file}, const struct utmp *@var{utmp})
+@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}}
+@c updwtmp @mtascusig:ALRM @mtascutimer @acsfd
+@c TRANSFORM_UTMP_FILE_NAME dup ok
+@c *libc_utmp_file_functions->updwtmp = updwtmp_file @mtascusig:ALRM @mtascutimer @acsfd
+@c open_not_cancel_2 dup @acsfd
+@c LOCK_FILE dup @mtascusig:ALRM @mtascutimer
+@c LOCKING_FAILED dup ok
+@c lseek64 dup ok
+@c ftruncate64 dup ok
+@c write_not_cancel dup ok
+@c UNLOCK_FILE dup @mtascutimer
+@c close_not_cancel_no_status dup @acsfd
The @code{updwtmp} function appends the entry *@var{utmp} to the
database specified by @var{wtmp_file}. For possible values for the
@var{wtmp_file} argument see the @code{utmpname} function.
@@ -1330,6 +1609,7 @@ can be found using the @code{sizeof} operator.
@comment utmpx.h
@comment XPG4.2
@deftypefun void setutxent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
This function is similar to @code{setutent}. In @theglibc{} it is
simply an alias for @code{setutent}.
@end deftypefun
@@ -1337,6 +1617,7 @@ simply an alias for @code{setutent}.
@comment utmpx.h
@comment XPG4.2
@deftypefun {struct utmpx *} getutxent (void)
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
The @code{getutxent} function is similar to @code{getutent}, but returns
a pointer to a @code{struct utmpx} instead of @code{struct utmp}. In
@theglibc{} it simply is an alias for @code{getutent}.
@@ -1345,6 +1626,7 @@ a pointer to a @code{struct utmpx} instead of @code{struct utmp}. In
@comment utmpx.h
@comment XPG4.2
@deftypefun void endutxent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
This function is similar to @code{endutent}. In @theglibc{} it is
simply an alias for @code{endutent}.
@end deftypefun
@@ -1352,6 +1634,7 @@ simply an alias for @code{endutent}.
@comment utmpx.h
@comment XPG4.2
@deftypefun {struct utmpx *} getutxid (const struct utmpx *@var{id})
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
This function is similar to @code{getutid}, but uses @code{struct utmpx}
instead of @code{struct utmp}. In @theglibc{} it is simply an alias
for @code{getutid}.
@@ -1360,6 +1643,7 @@ for @code{getutid}.
@comment utmpx.h
@comment XPG4.2
@deftypefun {struct utmpx *} getutxline (const struct utmpx *@var{line})
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
This function is similar to @code{getutid}, but uses @code{struct utmpx}
instead of @code{struct utmp}. In @theglibc{} it is simply an alias
for @code{getutline}.
@@ -1368,6 +1652,7 @@ for @code{getutline}.
@comment utmpx.h
@comment XPG4.2
@deftypefun {struct utmpx *} pututxline (const struct utmpx *@var{utmp})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
The @code{pututxline} function is functionally identical to
@code{pututline}, but uses @code{struct utmpx} instead of @code{struct
utmp}. In @theglibc{}, @code{pututxline} is simply an alias for
@@ -1377,6 +1662,7 @@ utmp}. In @theglibc{}, @code{pututxline} is simply an alias for
@comment utmpx.h
@comment XPG4.2
@deftypefun int utmpxname (const char *@var{file})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
The @code{utmpxname} function is functionally identical to
@code{utmpname}. In @theglibc{}, @code{utmpxname} is simply an
alias for @code{utmpname}.
@@ -1391,6 +1677,7 @@ identical.
@comment utmp.h
@comment GNU
@deftypefun int getutmp (const struct utmpx *@var{utmpx}, struct utmp *@var{utmp})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{getutmp} copies the information, insofar as the structures are
compatible, from @var{utmpx} to @var{utmp}.
@end deftypefun
@@ -1399,6 +1686,7 @@ compatible, from @var{utmpx} to @var{utmp}.
@comment utmp.h
@comment GNU
@deftypefun int getutmpx (const struct utmp *@var{utmp}, struct utmpx *@var{utmpx})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@code{getutmpx} copies the information, insofar as the structures are
compatible, from @var{utmp} to @var{utmpx}.
@end deftypefun
@@ -1418,6 +1706,17 @@ for @code{ut_user} in @file{utmp.h}.
@comment utmp.h
@comment BSD
@deftypefun int login_tty (int @var{filedes})
+@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c If this function is canceled, it may have succeeded in redirecting
+@c only some of the standard streams to the newly opened terminal.
+@c Should there be a safety annotation for this?
+@c login_tty @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
+@c setsid dup ok
+@c ioctl dup ok
+@c ttyname dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
+@c close dup @acsfd
+@c open dup @acsfd
+@c dup2 dup ok
This function makes @var{filedes} the controlling terminal of the
current process, redirects standard input, standard output and
standard error output to this terminal, and closes @var{filedes}.
@@ -1429,6 +1728,24 @@ on error.
@comment utmp.h
@comment BSD
@deftypefun void login (const struct utmp *@var{entry})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsfd{} @acsmem{}}}
+@c login @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acucorrupt @acsfd @acsmem
+@c getpid dup ok
+@c tty_name @ascuheap @acucorrupt @acsmem @acsfd
+@c ttyname_r dup @ascuheap @acsmem @acsfd
+@c memchr dup ok
+@c realloc dup @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c strncmp dup ok
+@c basename dup ok
+@c strncpy dup ok
+@c utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd
+@c pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c endutent dup @mtasurace:utent @asulock @aculock
+@c free dup @ascuheap @acsmem
+@c updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd
The @code{login} functions inserts an entry into the user accounting
database. The @code{ut_line} member is set to the name of the terminal
on standard input. If standard input is not a terminal @code{login}
@@ -1444,6 +1761,17 @@ A copy of the entry is written to the user accounting log file.
@comment utmp.h
@comment BSD
@deftypefun int logout (const char *@var{ut_line})
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+@c logout @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acsfd @acsmem
+@c utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd
+@c strncpy dup ok
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c bzero dup ok
+@c gettimeofday dup ok
+@c time dup ok
+@c pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+@c endutent dup @mtasurace:utent @asulock @aculock
This function modifies the user accounting database to indicate that the
user on @var{ut_line} has logged out.
@@ -1454,6 +1782,14 @@ written to the database, or @code{0} on error.
@comment utmp.h
@comment BSD
@deftypefun void logwtmp (const char *@var{ut_line}, const char *@var{ut_name}, const char *@var{ut_host})
+@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}}
+@c logwtmp @mtascusig:ALRM @mtascutimer @acsfd
+@c memset dup ok
+@c getpid dup ok
+@c strncpy dup ok
+@c gettimeofday dup ok
+@c time dup ok
+@c updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd
The @code{logwtmp} function appends an entry to the user accounting log
file, for the current time and the information provided in the
@var{ut_line}, @var{ut_name} and @var{ut_host} arguments.
@@ -1535,6 +1871,14 @@ functions are declared in @file{pwd.h}.
@comment pwd.h
@comment POSIX.1
@deftypefun {struct passwd *} getpwuid (uid_t @var{uid})
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwuid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getpwuid @mtasurace:pwuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
This function returns a pointer to a statically-allocated structure
containing information about the user whose user ID is @var{uid}. This
structure may be overwritten on subsequent calls to @code{getpwuid}.
@@ -1546,6 +1890,208 @@ user ID @var{uid}.
@comment pwd.h
@comment POSIX.1c
@deftypefun int getpwuid_r (uid_t @var{uid}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getpwuid_r @ascuheap @acsfd @acsmem
+@c itoa_word dup ok
+@c nscd_getpw_r @ascuheap @acsfd @acsmem
+@c nscd_get_map_ref @ascuheap @acsfd @acsmem
+@c nscd_acquire_maplock ok
+@c nscd_get_mapping @ascuheap @acsfd @acsmem
+@c open_socket dup @acsfd
+@c memset dup ok
+@c wait_on_socket dup ok
+@c recvmsg dup ok
+@c strcmp dup ok
+@c fstat64 dup ok
+@c mmap dup @acsmem
+@c munmap dup @acsmem
+@c malloc dup @ascuheap @acsmem
+@c close dup ok
+@c nscd_unmap dup @ascuheap @acsmem
+@c nscd_cache_search ok
+@c nis_hash ok
+@c memcmp dup ok
+@c nscd_open_socket @acsfd
+@c open_socket @acsfd
+@c socket dup @acsfd
+@c fcntl dup ok
+@c strcpy dup ok
+@c connect dup ok
+@c send dup ok
+@c gettimeofday dup ok
+@c poll dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c wait_on_socket dup ok
+@c read dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c readall ok
+@c read dup ok
+@c wait_on_socket ok
+@c poll dup ok
+@c gettimeofday dup ok
+@c memcpy dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c nscd_unmap @ascuheap @acsmem
+@c munmap dup ok
+@c free dup @ascuheap @acsmem
+@c nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_database_lookup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c libc_lock_lock @asulock @aculock
+@c libc_lock_unlock @aculock
+@c nss_parse_file @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no concurrent uses]
+@c malloc dup @asulock @aculock @acsfd @acsmem
+@c fclose dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c getline dup @ascuheap @aculock @acucorrupt @acsmem
+@c strchrnul dup ok
+@c nss_getline @mtslocale @ascuheap @acsmem
+@c isspace @mtslocale^^
+@c strlen dup ok
+@c malloc dup @asulock @aculock @acsfd @acsmem
+@c memcpy dup ok
+@c nss_parse_service_list dup @mtslocale^, @ascuheap @acsmem
+@c feof_unlocked dup ok
+@c free dup @asulock @aculock @acsfd @acsmem
+@c strcmp dup ok
+@c nss_parse_service_list @mtslocale^, @ascuheap @acsmem
+@c isspace @mtslocale^^
+@c malloc dup @asulock @aculock @acsfd @acsmem
+@c mempcpy dup ok
+@c strncasecmp dup ok
+@c free dup @asulock @aculock @acsfd @acsmem
+@c malloc dup @asulock @aculock @acsfd @acsmem
+@c nss_lookup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup_function @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c tsearch @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking]
+@c known_compare ok
+@c strcmp dup ok
+@c malloc dup @ascuheap @acsmem
+@c tdelete @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking]
+@c free dup @ascuheap @acsmem
+@c nss_load_library @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem
+@c nss_new_service @ascuheap @acsmem
+@c strcmp dup ok
+@c malloc dup @ascuheap @acsmem
+@c strlen dup ok
+@c stpcpy dup ok
+@c libc_dlopen @ascudlopen @ascuheap @asulock @aculock @acsfd @acsmem
+@c libc_dlsym dup @asulock @aculock @acsfd @acsmem
+@c *ifct(*nscd_init_cb) @ascuplugin
+@c stpcpy dup ok
+@c libc_dlsym dup @asulock @aculock @acsfd @acsmem
+@c libc_lock_unlock dup ok
+@c nss_next_action ok
+@c *fct.l -> _nss_*_getpwuid_r @ascuplugin
+@c nss_next2 @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_next_action dup ok
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+
+@c _nss_files_getpwuid_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c internal_setent @ascuheap @asulock @aculock @acsmem @acsfd
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fileno dup ok
+@c fcntl dup ok
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c rewind dup @aculock [stream guarded by non-recursive pwent lock]
+@c internal_getent @mtslocale^
+@c fgets_unlocked dup ok [stream guarded by non-recursive pwent lock]
+@c isspace dup @mtslocale^^
+@c _nss_files_parse_pwent = parse_line ok
+@c strpbrk dup ok
+@c internal_endent @ascuheap @asulock @aculock @acsmem @acsfd
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_unlock dup @aculock
+
+@c _nss_nis_getpwuid_r ... not fully reviewed (assumed) @asuinit @asulock @acucorrupt @aculock
+@c yp_get_default_domain @asulock @aculock
+@c libc_lock_lock dup @asulock @aculock
+@c getdomainname dup ok
+@c strcmp dup ok
+@c libc_lock_unlock dup @aculock
+@c snprintf dup @ascuheap @acsmem
+@c yp_match
+@c do_ypcall_tr(xdr_ypreq_key,xdr_ypresp_val)
+@c do_ypcall(xdr_ypreq_key,xdr_ypresp_val)
+@c libc_lock_lock @asulock @aculock
+@c strcmp
+@c yp_bind
+@c ypclnt_call
+@c clnt_call
+@c clnt_perror
+@c libc_lock_unlock @aculock
+@c yp_unbind_locked
+@c yp_unbind
+@c strcmp dup ok
+@c calloc dup @asulock @aculock @acsfd @acsmem
+@c yp_bind_file
+@c strlen dup ok
+@c snprintf dup @ascuheap @acsmem
+@c open dup @acsfd [cancelpt]
+@c pread dup [cancelpt]
+@c yp_bind_client_create
+@c close dup @acsfd [cancelpt]
+@c yp_bind_ypbindprog
+@c clnttcp_create
+@c clnt_destroy
+@c clnt_call(xdr_domainname,xdr_ypbind_resp)
+@c memset dup ok
+@c yp_bind_client_create
+@c free dup @asulock @aculock @acsfd @acsmem
+@c calloc dup @asulock @aculock @acsfd @acsmem
+@c free dup @asulock @aculock @acsfd @acsmem
+@c ypprot_err
+@c memcpy dup ok
+@c xdr_free(xdr_ypresp_val)
+@c xdr_ypresp_val
+@c xdr_ypstat
+@c xdr_enum
+@c XDR_PUTLONG
+@c *x_putlong
+@c XDR_GETLONG
+@c *x_getlong
+@c xdr_long
+@c XDR_PUTLONG dup
+@c XDR_GETLONG dup
+@c xdr_short
+@c XDR_PUTLONG dup
+@c XDR_GETLONG dup
+@c xdr_valdat
+@c xdr_bytes
+@c xdr_u_int
+@c XDR_PUTLONG dup
+@c XDR_GETLONG dup
+@c mem_alloc @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c xdr_opaque
+@c XDR_GETBYTES
+@c *x_getbytes
+@c XDR_PUTBYTES
+@c *x_putbytes
+@c mem_free @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c yperr2nss ok
+@c strchr dup ok
+@c _nls_default_nss @asuinit @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c init @asuinit^, @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking ok [no concurrent uses]
+@c feof_unlocked dup ok
+@c getline dup @ascuheap @aculock @acucorrupt @acsmem
+@c isspace dup @mtslocale^^
+@c strncmp dup ok
+@c free dup @asulock @acsmem @acsfd @aculock
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c free dup @asulock @acsmem @acsfd @aculock
+@c mempcpy dup ok
+@c strncpy dup ok
+@c isspace dup @mtslocale^^
+@c _nss_files_parse_pwent ok
This function is similar to @code{getpwuid} in that it returns
information about the user whose user ID is @var{uid}. However, it
fills the user supplied structure pointed to by @var{result_buf} with
@@ -1568,6 +2114,14 @@ error code @code{ERANGE} is returned and @var{errno} is set to
@comment pwd.h
@comment POSIX.1
@deftypefun {struct passwd *} getpwnam (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getpwnam @mtasurace:pwnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
This function returns a pointer to a statically-allocated structure
containing information about the user whose user name is @var{name}.
This structure may be overwritten on subsequent calls to
@@ -1579,6 +2133,25 @@ A null pointer return indicates there is no user named @var{name}.
@comment pwd.h
@comment POSIX.1c
@deftypefun int getpwnam_r (const char *@var{name}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getpwnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getpwnam_r @ascuheap @asulock @aculock @acsfd @acsmem
+@c strlen dup ok
+@c nscd_getpw_r dup @ascuheap @asulock @aculock @acsfd @acsmem
+@c nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c
+@c _nss_files_getpwnam_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c internal_setent dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c internal_getent dup @mtslocale^
+@c strcmp dup ok
+@c internal_endent dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c libc_lock_unlock dup @aculock
+@c
+@c _nss_*_getpwnam_r (assumed) @asuinit @asulock @acucorrupt @aculock
+
This function is similar to @code{getpwnam} in that is returns
information about the user whose user name is @var{name}. However, like
@code{getpwuid_r}, it fills the user supplied buffers in
@@ -1603,6 +2176,16 @@ particular file.
@comment pwd.h
@comment SVID
@deftypefun {struct passwd *} fgetpwent (FILE *@var{stream})
+@safety{@prelim{}@mtunsafe{@mtasurace{:fpwent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c fgetpwent @mtasurace:fpwent @asucorrupt @asulock @acucorrupt @aculock
+@c fgetpos dup @asucorrupt @aculock @acucorrupt
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c fgetpwent_r dup @asucorrupt @acucorrupt @aculock
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c fsetpos dup @asucorrupt @aculock @acucorrupt
+@c libc_lock_unlock dup @aculock
This function reads the next user entry from @var{stream} and returns a
pointer to the entry. The structure is statically allocated and is
rewritten on subsequent calls to @code{fgetpwent}. You must copy the
@@ -1615,6 +2198,14 @@ password database file.
@comment pwd.h
@comment GNU
@deftypefun int fgetpwent_r (FILE *@var{stream}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c fgetpwent_r @asucorrupt @acucorrupt @aculock
+@c flockfile dup @aculock
+@c fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking]
+@c feof_unlocked dup ok
+@c funlockfile dup @aculock
+@c isspace dup @mtslocale^^
+@c parse_line dup ok
This function is similar to @code{fgetpwent} in that it reads the next
user entry from @var{stream}. But the result is returned in the
structure pointed to by @var{result_buf}. The
@@ -1637,6 +2228,17 @@ The way to scan all the entries in the user database is with
@comment pwd.h
@comment SVID, BSD
@deftypefun void setpwent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_setent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c ** resolv's res_maybe_init not called here
+@c setup(nss_passwd_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:pwent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function initializes a stream which @code{getpwent} and
@code{getpwent_r} use to read the user database.
@end deftypefun
@@ -1644,6 +2246,15 @@ This function initializes a stream which @code{getpwent} and
@comment pwd.h
@comment POSIX.1
@deftypefun {struct passwd *} getpwent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtasurace{:pwentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getpwent @mtasurace:pwent @mtasurace:pwentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(getpwent_r) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = getpwent_r dup @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
The @code{getpwent} function reads the next entry from the stream
initialized by @code{setpwent}. It returns a pointer to the entry. The
structure is statically allocated and is rewritten on subsequent calls
@@ -1656,6 +2267,20 @@ A null pointer is returned when no more entries are available.
@comment pwd.h
@comment GNU
@deftypefun int getpwent_r (struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c The static buffer here is not the result_buf, but rather the
+@c variables that keep track of what nss backend we've last used, and
+@c whatever internal state the nss backend uses to keep track of the
+@c last read entry.
+@c getpwent_r @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:pwent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:pwent @ascuplugin
+@c libc_lock_unlock dup @aculock
This function is similar to @code{getpwent} in that it returns the next
entry from the stream initialized by @code{setpwent}. Like
@code{fgetpwent_r}, it uses the user-supplied buffers in
@@ -1668,6 +2293,15 @@ The return values are the same as for @code{fgetpwent_r}.
@comment pwd.h
@comment SVID, BSD
@deftypefun void endpwent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c ** resolv's res_maybe_init not called here
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:pwent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @aculock
This function closes the internal stream used by @code{getpwent} or
@code{getpwent_r}.
@end deftypefun
@@ -1678,6 +2312,9 @@ This function closes the internal stream used by @code{getpwent} or
@comment pwd.h
@comment SVID
@deftypefun int putpwent (const struct passwd *@var{p}, FILE *@var{stream})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+@c putpwent @mtslocale @asucorrupt @aculock @acucorrupt
+@c fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem]
This function writes the user entry @code{*@var{p}} to the stream
@var{stream}, in the format used for the standard user database
file. The return value is zero on success and nonzero on failure.
@@ -1751,6 +2388,9 @@ declared in @file{grp.h}.
@comment grp.h
@comment POSIX.1
@deftypefun {struct group *} getgrgid (gid_t @var{gid})
+@safety{@prelim{}@mtunsafe{@mtasurace{:grgid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrgid =~ getpwuid dup @mtasurace:grgid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getgrgid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function returns a pointer to a statically-allocated structure
containing information about the group whose group ID is @var{gid}.
This structure may be overwritten by subsequent calls to
@@ -1762,6 +2402,26 @@ A null pointer indicates there is no group with ID @var{gid}.
@comment grp.h
@comment POSIX.1c
@deftypefun int getgrgid_r (gid_t @var{gid}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrgid_r =~ getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getgrgid_r @ascuheap @acsfd @acsmem
+@c itoa_word dup ok
+@c nscd_getgr_r @ascuheap @acsfd @acsmem
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c nscd_open_socket dup @acsfd
+@c readvall ok
+@c readv dup ok
+@c memcpy dup ok
+@c wait_on_socket dup ok
+@c memcpy dup ok
+@c readall dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c nss_group_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_getgrgid_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function is similar to @code{getgrgid} in that it returns
information about the group whose group ID is @var{gid}. However, it
fills the user supplied structure pointed to by @var{result_buf} with
@@ -1783,6 +2443,9 @@ error code @code{ERANGE} is returned and @var{errno} is set to
@comment grp.h
@comment SVID, BSD
@deftypefun {struct group *} getgrnam (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:grnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrnam =~ getpwnam dup @mtasurace:grnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c getgrnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function returns a pointer to a statically-allocated structure
containing information about the group whose group name is @var{name}.
This structure may be overwritten by subsequent calls to
@@ -1794,6 +2457,14 @@ A null pointer indicates there is no group named @var{name}.
@comment grp.h
@comment POSIX.1c
@deftypefun int getgrnam_r (const char *@var{name}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrnam_r =~ getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_getgrnam_r @ascuheap @asulock @aculock @acsfd @acsmem
+@c strlen dup ok
+@c nscd_getgr_r dup @ascuheap @asulock @aculock @acsfd @acsmem
+@c nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function is similar to @code{getgrnam} in that is returns
information about the group whose group name is @var{name}. Like
@code{getgrgid_r}, it uses the user supplied buffers in
@@ -1817,6 +2488,16 @@ particular file.
@comment grp.h
@comment SVID
@deftypefun {struct group *} fgetgrent (FILE *@var{stream})
+@safety{@prelim{}@mtunsafe{@mtasurace{:fgrent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c fgetgrent @mtasurace:fgrent @asucorrupt @asulock @acucorrupt @aculock
+@c fgetpos dup @asucorrupt @aculock @acucorrupt
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c fgetgrent_r dup @asucorrupt @acucorrupt @aculock
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c fsetpos dup @asucorrupt @aculock @acucorrupt
+@c libc_lock_unlock dup @aculock
The @code{fgetgrent} function reads the next entry from @var{stream}.
It returns a pointer to the entry. The structure is statically
allocated and is overwritten on subsequent calls to @code{fgetgrent}. You
@@ -1830,6 +2511,14 @@ group database file.
@comment grp.h
@comment GNU
@deftypefun int fgetgrent_r (FILE *@var{stream}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+@c fgetgrent_r @asucorrupt @acucorrupt @aculock
+@c flockfile dup @aculock
+@c fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking]
+@c feof_unlocked dup ok
+@c funlockfile dup @aculock
+@c isspace dup @mtslocale^^
+@c parse_line dup ok
This function is similar to @code{fgetgrent} in that it reads the next
user entry from @var{stream}. But the result is returned in the
structure pointed to by @var{result_buf}. The first @var{buflen} bytes
@@ -1852,6 +2541,9 @@ The way to scan all the entries in the group database is with
@comment grp.h
@comment SVID, BSD
@deftypefun void setgrent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setgrent =~ setpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c ...*lookup_fct = nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function initializes a stream for reading from the group data base.
You use this stream by calling @code{getgrent} or @code{getgrent_r}.
@end deftypefun
@@ -1859,6 +2551,9 @@ You use this stream by calling @code{getgrent} or @code{getgrent_r}.
@comment grp.h
@comment SVID, BSD
@deftypefun {struct group *} getgrent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtasurace{:grentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrent =~ getpwent dup @mtasurace:grent @mtasurace:grentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *func = getgrent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
The @code{getgrent} function reads the next entry from the stream
initialized by @code{setgrent}. It returns a pointer to the entry. The
structure is statically allocated and is overwritten on subsequent calls
@@ -1869,6 +2564,8 @@ wish to save the information.
@comment grp.h
@comment GNU
@deftypefun int getgrent_r (struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getgrent_r =~ getpwent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function is similar to @code{getgrent} in that it returns the next
entry from the stream initialized by @code{setgrent}. Like
@code{fgetgrent_r}, it places the result in user-supplied buffers
@@ -1882,6 +2579,8 @@ value is non-zero and @var{result} contains a null pointer.
@comment grp.h
@comment SVID, BSD
@deftypefun void endgrent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endgrent =~ endpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function closes the internal stream used by @code{getgrent} or
@code{getgrent_r}.
@end deftypefun
@@ -1966,6 +2665,40 @@ These functions are declared in @file{netdb.h}.
@comment netdb.h
@comment BSD
@deftypefun int setnetgrent (const char *@var{netgroup})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c setnetgrent @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nscd_setnetgrent @ascuheap @acsfd @acsmem
+@c __nscd_setnetgrent @ascuheap @acsfd @acsmem
+@c strlen dup ok
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c nscd_open_socket dup @acsfd
+@c malloc dup @ascuheap @acsmem
+@c readall dup ok
+@c free dup @ascuheap @acsmem
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c internal_setnetgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c free_memory dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c internal_setnetgrent_reuse @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *endfct @ascuplugin
+@c (netgroup::)setup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_netgroup_lookup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_netgroup_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *endfct @ascuplugin
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c libc_lock_unlock dup @aculock
A call to this function initializes the internal state of the library to
allow following calls of the @code{getnetgrent} to iterate over all entries
in the netgroup with name @var{netgroup}.
@@ -1991,6 +2724,12 @@ the @code{innetgr} function and parts of the implementation of the
@comment netdb.h
@comment BSD
@deftypefun int getnetgrent (char **@var{hostp}, char **@var{userp}, char **@var{domainp})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtasurace{:netgrentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getnetgrent @mtasurace:netgrent @mtasurace:netgrentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c uses unsafely a static buffer allocated within a libc_once call
+@c allocate (libc_once) @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c getnetgrent_r dup @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
This function returns the next unprocessed entry of the currently
selected netgroup. The string pointers, in which addresses are passed in
the arguments @var{hostp}, @var{userp}, and @var{domainp}, will contain
@@ -2006,6 +2745,19 @@ value of @code{0} means no further entries exist or internal errors occurred.
@comment netdb.h
@comment GNU
@deftypefun int getnetgrent_r (char **@var{hostp}, char **@var{userp}, char **@var{domainp}, char *@var{buffer}, size_t @var{buflen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c getnetgrent_r @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c internal_getnetgrent_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct @ascuplugin
+@c nscd_getnetgrent ok
+@c rawmemchr dup ok
+@c internal_setnetgrent_reuse dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c strcmp dup ok
+@c malloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c libc_lock_unlock dup @aculock
This function is similar to @code{getnetgrent} with only one exception:
the strings the three string pointers @var{hostp}, @var{userp}, and
@var{domainp} point to, are placed in the buffer of @var{buflen} bytes
@@ -2024,6 +2776,13 @@ SunOS libc does not provide this function.
@comment netdb.h
@comment BSD
@deftypefun void endnetgrent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endnetgrent @mtasurace:netgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c internal_endnetgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c free_memory dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
This function frees all buffers which were allocated to process the last
selected netgroup. As a result all string pointers returned by calls
to @code{getnetgrent} are invalid afterwards.
@@ -2039,6 +2798,37 @@ selected netgroup.
@comment netdb.h
@comment BSD
@deftypefun int innetgr (const char *@var{netgroup}, const char *@var{host}, const char *@var{user}, const char *@var{domain})
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c This function does not use the static data structure that the
+@c *netgrent* ones do, but since each nss must maintains internal state
+@c to support iteration and concurrent iteration will interfere
+@c destructively, we regard this internal state as a static buffer.
+@c getnetgrent_r iteration in each nss backend.
+@c innetgr @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nscd_innetgr @ascuheap @acsfd @acsmem
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c stpcpy dup ok
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c nscd_open_socket dup @acsfd
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c memset dup ok
+@c (netgroup::)setup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *setfct.f @ascuplugin
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *getfct @ascuplugin
+@c strcmp dup ok
+@c strlen dup ok
+@c malloc dup @ascuheap @acsmem
+@c memcpy dup ok
+@c strcasecmp dup
+@c *endfct @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c free_memory dup @ascuheap @acsmem
This function tests whether the triple specified by the parameters
@var{hostp}, @var{userp}, and @var{domainp} is part of the netgroup
@var{netgroup}. Using this function has the advantage that
@@ -2062,3 +2852,7 @@ found in the netgroup. The return value is @code{0} if the netgroup
itself is not found, the netgroup does not contain the triple or
internal errors occurred.
@end deftypefun
+
+@c FIXME these are undocumented:
+@c setresgid
+@c setresuid
diff --git a/libc/math/gen-libm-test.pl b/libc/math/gen-libm-test.pl
index d5fb278d4..a1c528d97 100755
--- a/libc/math/gen-libm-test.pl
+++ b/libc/math/gen-libm-test.pl
@@ -42,7 +42,7 @@ use strict;
use vars qw ($input $output $auto_input);
use vars qw (%results);
use vars qw (%beautify @all_floats);
-use vars qw ($output_dir $ulps_file);
+use vars qw ($output_dir $ulps_file $srcdir);
use vars qw (%auto_tests);
# all_floats is sorted and contains all recognised float types
@@ -75,6 +75,7 @@ getopts('u:o:nh');
$ulps_file = 'libm-test-ulps';
$output_dir = '';
+($srcdir = $0) =~ s{[^/]*$}{};
if ($opt_h) {
print "Usage: gen-libm-test.pl [OPTIONS]\n";
@@ -89,7 +90,7 @@ $ulps_file = $opt_u if ($opt_u);
$output_dir = $opt_o if ($opt_o);
$input = "libm-test.inc";
-$auto_input = "auto-libm-test-out";
+$auto_input = "${srcdir}auto-libm-test-out";
$output = "${output_dir}libm-test.c";
&parse_ulps ($ulps_file);
diff --git a/libc/nptl/ChangeLog b/libc/nptl/ChangeLog
index 0defc9a87..a4d3f45a4 100644
--- a/libc/nptl/ChangeLog
+++ b/libc/nptl/ChangeLog
@@ -1,3 +1,13 @@
+2014-02-05 Carlos O'Donell <carlos@redhat.com>
+
+ * sysdeps/unix/sysv/linux/tst-setgetname.c (do_test): Skip the
+ test if !__ASSUME_PROC_PID_TASK_COMM and get_self_comm returns
+ ENOENT.
+
+2014-01-23 Stefan Liebler <stli@linux.vnet.ibm.com>
+
+ * tst-tls7.c: Adjust testcase timeout
+
2014-01-18 H.J. Lu <hongjiu.lu@intel.com>
[BZ #14782]
@@ -9,14 +19,7 @@
(do_test): Call it.
* tst-tls7mod.c (action): Move sem_post to caller.
-2014-01-03 Andrew Hunter <ahh@google.com>
-
- * nptl/Makefile (tst-tls7): New test.
- * nptl/tst-tls7.c: New file.
- * nptl/tst-tls7mod.c: New file.
- * nptl/allocatestack.c (init_one_static_tls): Use atomic barrier.
-
-2013-12-12 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+2011-12-12 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* sysdeps/powerpc/tls.h (struct tcbhead_t): Add DSO and TAR fields.
* nptl/sysdeps/powerpc/tcb-offsets.sym: Likewise.
diff --git a/libc/nptl/Makefile b/libc/nptl/Makefile
index 2cd0ce3ad..e07559ed2 100644
--- a/libc/nptl/Makefile
+++ b/libc/nptl/Makefile
@@ -307,7 +307,7 @@ tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \
tst-oncex3 tst-oncex4
endif
ifeq ($(build-shared),yes)
-tests += tst-atfork2 tst-tls3 tst-tls4 tst-tls5 tst-tls7 tst-_res1 tst-fini1 \
+tests += tst-atfork2 tst-tls3 tst-tls4 tst-tls5 tst-_res1 tst-fini1 \
tst-stackguard1
tests-nolibpthread += tst-fini1
ifeq ($(have-z-execstack),yes)
@@ -318,8 +318,7 @@ endif
modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \
tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \
tst-tls5modd tst-tls5mode tst-tls5modf \
- tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod \
- tst-tls7mod
+ tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod
extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) tst-cleanup4aux.o
test-extras += $(modules-names) tst-cleanup4aux
test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names)))
@@ -333,7 +332,6 @@ tst-tls5modc.so-no-z-defs = yes
tst-tls5modd.so-no-z-defs = yes
tst-tls5mode.so-no-z-defs = yes
tst-tls5modf.so-no-z-defs = yes
-tst-tls7mod.so-no-z-defs = yes
ifeq ($(build-shared),yes)
# Build all the modules even when not actually running test programs.
@@ -496,12 +494,6 @@ $(objpfx)tst-tls5: $(objpfx)tst-tls5mod.so $(shared-thread-library)
LDFLAGS-tst-tls5 = $(no-as-needed)
LDFLAGS-tst-tls5mod.so = -Wl,-soname,tst-tls5mod.so
-# ensure free(malloc()) isn't optimized out
-CFLAGS-tst-tls7.c = -fno-builtin-malloc -fno-builtin-free
-$(objpfx)tst-tls7: $(libdl) $(shared-thread-library)
-$(objpfx)tst-tls7.out: $(objpfx)tst-tls7mod.so
-$(objpfx)tst-tls7mod.so: $(shared-thread-library)
-
ifeq ($(build-shared),yes)
ifeq ($(run-built-tests),yes)
tests: $(objpfx)tst-tls6.out
diff --git a/libc/nptl/allocatestack.c b/libc/nptl/allocatestack.c
index 2a5ac2211..13eca47cf 100644
--- a/libc/nptl/allocatestack.c
+++ b/libc/nptl/allocatestack.c
@@ -242,7 +242,11 @@ get_cached_stack (size_t *sizep, void **memp)
/* Clear the DTV. */
dtv_t *dtv = GET_DTV (TLS_TPADJ (result));
- _dl_clear_dtv (dtv);
+ for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt)
+ if (! dtv[1 + cnt].pointer.is_static
+ && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED)
+ free (dtv[1 + cnt].pointer.val);
+ memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t));
/* Re-initialize the TLS. */
_dl_allocate_tls_init (TLS_TPADJ (result));
@@ -1173,18 +1177,13 @@ init_one_static_tls (struct pthread *curp, struct link_map *map)
# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
# endif
- /* Initialize the memory. */
- memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
- '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
-
/* Fill in the DTV slot so that a later LD/GD access will find it. */
- dtv[map->l_tls_modid].pointer.is_static = true;
- /* Pairs against the read barrier in tls_get_attr_tail, guaranteeing
- any thread waiting for an update to pointer.val sees the
- initimage write. */
- atomic_write_barrier ();
dtv[map->l_tls_modid].pointer.val = dest;
+ dtv[map->l_tls_modid].pointer.is_static = true;
+ /* Initialize the memory. */
+ memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
+ '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
}
void
diff --git a/libc/nptl/shlib-versions b/libc/nptl/shlib-versions
index 495b240a5..f6b9b9ae6 100644
--- a/libc/nptl/shlib-versions
+++ b/libc/nptl/shlib-versions
@@ -2,5 +2,5 @@ sparc64.*-.*-linux.* libpthread=0 GLIBC_2.2
sh.*-.*-linux.* libpthread=0 GLIBC_2.2
s390x-.*-linux.* libpthread=0 GLIBC_2.2
powerpc64-.*-linux.* libpthread=0 GLIBC_2.3
-powerpc.*le-.*-linux.* libpthread=0 GLIBC_2.18
+powerpc.*le-.*-linux.* libpthread=0 GLIBC_2.17
.*-.*-linux.* libpthread=0
diff --git a/libc/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c b/libc/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
index 2aceba53b..f5693e26c 100644
--- a/libc/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
+++ b/libc/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
@@ -23,6 +23,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#include <kernel-features.h>
/* New name of process. */
#define NEW_NAME "setname"
@@ -99,6 +100,19 @@ do_test (int argc, char **argv)
if (res == 0)
{
res = get_self_comm (gettid (), name_check, TASK_COMM_LEN);
+
+#if !__ASSUME_PROC_PID_TASK_COMM
+ /* On this first test we look for ENOENT to be returned from
+ get_self_comm to indicate that the kernel is older than
+ 2.6.33 and doesn't contain comm within the proc structure.
+ In that case we skip the entire test. */
+ if (res == ENOENT)
+ {
+ printf ("SKIP: The kernel does not have /proc/self/task/%%lu/comm.\n");
+ return 0;
+ }
+#endif
+
if (res == 0)
{
if (strncmp (name, name_check, strlen (BIG_NAME)) == 0)
diff --git a/libc/nptl/tst-tls7.c b/libc/nptl/tst-tls7.c
deleted file mode 100644
index 583d5b462..000000000
--- a/libc/nptl/tst-tls7.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Copyright (C) 2013 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
- <http://www.gnu.org/licenses/>. */
-
-
-/* This test checks that TLS in a dlopened object works when first accessed
- from a signal handler. */
-
-#include <assert.h>
-#include <atomic.h>
-#include <dlfcn.h>
-#include <pthread.h>
-#include <semaphore.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-void *
-spin (void *ignored)
-{
- while (1)
- {
- /* busywork */
- free (malloc (128));
- }
-
- /* never reached */
- return NULL;
-}
-
-static void (*tls7mod_action) (int, siginfo_t *, void *);
-
-static void
-action (int signo, siginfo_t *info, void *ignored)
-{
- sem_t *sem = info->si_value.sival_ptr;
-
- atomic_read_barrier ();
- assert (tls7mod_action != NULL);
- (*tls7mod_action) (signo, info, ignored);
-
- /* This sem_post may trigger dlclose, which will invalidate tls7mod_action.
- It is important to do that only after tls7mod_action is no longer
- active. */
- sem_post (sem);
-}
-
-int
-do_test (void)
-{
- pthread_t th[10];
-
- for (int i = 0; i < 10; ++i)
- {
- if (pthread_create (&th[i], NULL, spin, NULL))
- {
- puts ("pthread_create failed");
- exit (1);
- }
- }
-#define NITERS 75
-
- for (int i = 0; i < NITERS; ++i)
- {
- void *h = dlopen ("tst-tls7mod.so", RTLD_LAZY);
- if (h == NULL)
- {
- puts ("dlopen failed");
- exit (1);
- }
-
- tls7mod_action = dlsym (h, "action");
- if (tls7mod_action == NULL)
- {
- puts ("dlsym for action failed");
- exit (1);
- }
- atomic_write_barrier ();
-
- struct sigaction sa;
- sa.sa_sigaction = action;
- sigemptyset (&sa.sa_mask);
- sa.sa_flags = SA_SIGINFO;
- if (sigaction (SIGUSR1, &sa, NULL))
- {
- puts ("sigaction failed");
- exit (1);
- }
-
- sem_t sem;
- if (sem_init (&sem, 0, 0))
- {
- puts ("sem_init failed");
- }
-
- sigval_t val;
- val.sival_ptr = &sem;
- for (int i = 0; i < 10; ++i)
- {
- if (pthread_sigqueue (th[i], SIGUSR1, val))
- {
- puts ("pthread_sigqueue failed");
- }
- }
-
-
- for (int i = 0; i < 10; ++i)
- {
- if (sem_wait (&sem))
- {
- puts ("sem_wait failed");
- }
- }
-
- /* Paranoia. */
- tls7mod_action = NULL;
-
- if (dlclose (h))
- {
- puts ("dlclose failed");
- exit (1);
- }
- }
- return 0;
-}
-
-#define TIMEOUT 4
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
diff --git a/libc/nptl/tst-tls7mod.c b/libc/nptl/tst-tls7mod.c
deleted file mode 100644
index da5af5637..000000000
--- a/libc/nptl/tst-tls7mod.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2013 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
- <http://www.gnu.org/licenses/>. */
-
-/* Dynamic module with TLS to be accessed by a signal handler to check safety
- of that mode. */
-
-#include <semaphore.h>
-#include <signal.h>
-#include <unistd.h>
-
-/* This is an unlikely value to see in incorrectly initialized TLS
- block -- make sure we're initialized properly. */
-static __thread intptr_t tls_data = 0xdeadbeef;
-
-void
-action (int signo, siginfo_t *info, void *ignored)
-{
- if (tls_data != 0xdeadbeef)
- {
- write (STDOUT_FILENO, "wrong TLS value\n", 17);
- _exit (1);
- }
-
- /* arbitrary choice, just write something unique-ish. */
- tls_data = (intptr_t) info;
-}
diff --git a/libc/nscd/netgroupcache.c b/libc/nscd/netgroupcache.c
index 58234b149..be01fe867 100644
--- a/libc/nscd/netgroupcache.c
+++ b/libc/nscd/netgroupcache.c
@@ -241,7 +241,23 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
if (buflen - req->key_len - bufused < needed)
{
buflen += MAX (buflen, 2 * needed);
- buffer = xrealloc (buffer, buflen);
+ /* Save offset in the old buffer. We don't
+ bother with the NULL check here since
+ we'll do that later anyway. */
+ size_t nhostdiff = nhost - buffer;
+ size_t nuserdiff = nuser - buffer;
+ size_t ndomaindiff = ndomain - buffer;
+
+ char *newbuf = xrealloc (buffer, buflen);
+ /* Fix up the triplet pointers into the new
+ buffer. */
+ nhost = (nhost ? newbuf + nhostdiff
+ : NULL);
+ nuser = (nuser ? newbuf + nuserdiff
+ : NULL);
+ ndomain = (ndomain ? newbuf + ndomaindiff
+ : NULL);
+ buffer = newbuf;
}
nhost = memcpy (buffer + bufused,
diff --git a/libc/nss/nss_files/files-netgrp.c b/libc/nss/nss_files/files-netgrp.c
index 339f704c9..34eae4c5b 100644
--- a/libc/nss/nss_files/files-netgrp.c
+++ b/libc/nss/nss_files/files-netgrp.c
@@ -103,7 +103,8 @@ _nss_files_setnetgrent (const char *group, struct __netgrent *result)
result->cursor += (curlen - group_len) - 1;
}
- while (line[curlen - 1] == '\n' && line[curlen - 2] == '\\')
+ while (curlen > 1 && line[curlen - 1] == '\n'
+ && line[curlen - 2] == '\\')
{
/* Yes, we have a continuation line. */
if (found)
diff --git a/libc/po/fr.po b/libc/po/fr.po
index 95a78a731..f73622a81 100644
--- a/libc/po/fr.po
+++ b/libc/po/fr.po
@@ -7,10 +7,10 @@
# kerb <traduc@traduc.org>, 2008, 2009.
msgid ""
msgstr ""
-"Project-Id-Version: libc-2.17.90.20130724\n"
-"POT-Creation-Date: 2013-07-24 23:29-0700\n"
-"PO-Revision-Date: 2013-07-29 18:29+0100\n"
-"Last-Translator: kerb <y.kerb@laposte.net>\n"
+"Project-Id-Version: libc-2.18.90.20140105\n"
+"POT-Creation-Date: 2014-01-05 17:40+1000\n"
+"PO-Revision-Date: 2014-01-26 18:22+0100\n"
+"Last-Translator: Yan Kerb <y.kerb@laposte.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
@@ -150,8 +150,8 @@ msgstr ""
#: catgets/gencat.c:229 debug/pcprofiledump.c:209 elf/ldconfig.c:307
#: elf/pldd.c:219 elf/sln.c:85 elf/sprof.c:372 iconv/iconv_prog.c:408
#: iconv/iconvconfig.c:379 locale/programs/locale.c:277
-#: locale/programs/localedef.c:364 login/programs/pt_chown.c:88
-#: malloc/memusagestat.c:563 nscd/nscd.c:450 nss/getent.c:965 nss/makedb.c:369
+#: locale/programs/localedef.c:376 login/programs/pt_chown.c:88
+#: malloc/memusagestat.c:563 nss/getent.c:969 nss/makedb.c:369
#: posix/getconf.c:1121 sunrpc/rpcinfo.c:691
#: sysdeps/unix/sysv/linux/lddlibc4.c:61
#, c-format
@@ -165,9 +165,9 @@ msgstr ""
#: catgets/gencat.c:245 debug/pcprofiledump.c:225 debug/xtrace.sh:64
#: elf/ldconfig.c:323 elf/ldd.bash.in:38 elf/pldd.c:235 elf/sotruss.ksh:75
#: elf/sprof.c:389 iconv/iconv_prog.c:425 iconv/iconvconfig.c:396
-#: locale/programs/locale.c:294 locale/programs/localedef.c:390
+#: locale/programs/locale.c:294 locale/programs/localedef.c:402
#: login/programs/pt_chown.c:62 malloc/memusage.sh:71
-#: malloc/memusagestat.c:579 nscd/nscd.c:466 nss/getent.c:86 nss/makedb.c:385
+#: malloc/memusagestat.c:581 nscd/nscd.c:485 nss/getent.c:86 nss/makedb.c:385
#: posix/getconf.c:1103 sysdeps/unix/sysv/linux/lddlibc4.c:68
#, c-format
msgid ""
@@ -183,8 +183,8 @@ msgstr ""
#: catgets/gencat.c:250 debug/pcprofiledump.c:230 debug/xtrace.sh:68
#: elf/ldconfig.c:328 elf/pldd.c:240 elf/sprof.c:395 iconv/iconv_prog.c:430
#: iconv/iconvconfig.c:401 locale/programs/locale.c:299
-#: locale/programs/localedef.c:395 malloc/memusage.sh:75
-#: malloc/memusagestat.c:584 nscd/nscd.c:471 nss/getent.c:91 nss/makedb.c:390
+#: locale/programs/localedef.c:407 malloc/memusage.sh:75
+#: malloc/memusagestat.c:586 nscd/nscd.c:490 nss/getent.c:91 nss/makedb.c:390
#: posix/getconf.c:1108
#, c-format
msgid "Written by %s.\n"
@@ -387,60 +387,60 @@ msgstr "paramètre de mode invalide"
msgid "unknown"
msgstr "inconnu"
-#: elf/cache.c:126
+#: elf/cache.c:135
msgid "Unknown OS"
msgstr "Système d'exploitation inconnu"
-#: elf/cache.c:131
+#: elf/cache.c:140
#, c-format
msgid ", OS ABI: %s %d.%d.%d"
msgstr ", Système d'exploitation ABI : %s %d.%d.%d"
-#: elf/cache.c:148 elf/ldconfig.c:1318
+#: elf/cache.c:157 elf/ldconfig.c:1318
#, c-format
msgid "Can't open cache file %s\n"
msgstr "Ne peut ouvrir le fichier de cache %s\n"
-#: elf/cache.c:162
+#: elf/cache.c:171
#, c-format
msgid "mmap of cache file failed.\n"
msgstr "la procédure mmap sur le fichier de cache a échouée\n"
-#: elf/cache.c:166 elf/cache.c:180
+#: elf/cache.c:175 elf/cache.c:189
#, c-format
msgid "File is not a cache file.\n"
msgstr "Fichier n'est pas un fichier de cache.\n"
-#: elf/cache.c:213 elf/cache.c:223
+#: elf/cache.c:222 elf/cache.c:232
#, c-format
msgid "%d libs found in cache `%s'\n"
msgstr "%d libs trouvé dans le cache « %s »\n"
-#: elf/cache.c:417
+#: elf/cache.c:426
#, c-format
msgid "Can't create temporary cache file %s"
msgstr "Ne peut créer un fichier de cache temporaire %s"
-#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:444
+#: elf/cache.c:434 elf/cache.c:444 elf/cache.c:448 elf/cache.c:453
#, c-format
msgid "Writing of cache data failed"
msgstr "Échec d'écriture des données du cache"
-#: elf/cache.c:449
+#: elf/cache.c:458
#, c-format
msgid "Changing access rights of %s to %#o failed"
msgstr "Échec de la modification des droits d'accès de %s à %#o"
-#: elf/cache.c:454
+#: elf/cache.c:463
#, c-format
msgid "Renaming of %s to %s failed"
msgstr "Échec du changement de nom de %s vers %s"
-#: elf/dl-close.c:384 elf/dl-open.c:470
+#: elf/dl-close.c:383 elf/dl-open.c:470
msgid "cannot create scope list"
msgstr "ne peut créer une liste panorama"
-#: elf/dl-close.c:777
+#: elf/dl-close.c:776
msgid "shared object not open"
msgstr "objet partagé non ouvert"
@@ -469,11 +469,11 @@ msgstr "ne peut allouer la liste des symboles à rechercher"
msgid "Filters not supported with LD_TRACE_PRELINKING"
msgstr "Filtres non supportés avec LD_TRACE_PRELINKING"
-#: elf/dl-error.c:76
+#: elf/dl-error.c:77
msgid "DYNAMIC LINKER BUG!!!"
msgstr "PROBLÈME DANS LE CHARGEUR DE LIENS DYNAMIQUES!!!"
-#: elf/dl-error.c:123
+#: elf/dl-error.c:127
msgid "error while loading shared libraries"
msgstr "erreur lors du chargement des librairies partagées"
@@ -497,159 +497,159 @@ msgstr "ne peut créer une liste des possibilités"
msgid "cannot allocate name record"
msgstr "ne peut allouer un enregistrement de nom"
-#: elf/dl-load.c:542 elf/dl-load.c:658 elf/dl-load.c:743 elf/dl-load.c:862
+#: elf/dl-load.c:550 elf/dl-load.c:666 elf/dl-load.c:749 elf/dl-load.c:868
msgid "cannot create cache for search path"
msgstr "ne peut créer le cache pour le chemin de recherche"
-#: elf/dl-load.c:633
+#: elf/dl-load.c:641
msgid "cannot create RUNPATH/RPATH copy"
msgstr "ne peut créer une copie RUNPATH/RPATH"
-#: elf/dl-load.c:729
+#: elf/dl-load.c:735
msgid "cannot create search path array"
msgstr "ne peut créer un tableau des chemins de recherche"
-#: elf/dl-load.c:934
+#: elf/dl-load.c:940
msgid "cannot stat shared object"
msgstr "ne peut évaluer par stat() l'objet partagé"
-#: elf/dl-load.c:1012
+#: elf/dl-load.c:1018
msgid "cannot open zero fill device"
msgstr "ne peut ouvrir le fichier de périphérique rempli de zéros"
-#: elf/dl-load.c:1059 elf/dl-load.c:2342
+#: elf/dl-load.c:1065 elf/dl-load.c:2348
msgid "cannot create shared object descriptor"
msgstr "ne peut créer un descripteur d'objet partagé"
-#: elf/dl-load.c:1078 elf/dl-load.c:1755 elf/dl-load.c:1858
+#: elf/dl-load.c:1084 elf/dl-load.c:1761 elf/dl-load.c:1864
msgid "cannot read file data"
msgstr "ne peut lire les données du fichier"
-#: elf/dl-load.c:1124
+#: elf/dl-load.c:1130
msgid "ELF load command alignment not page-aligned"
msgstr "Commande de chargement sur une page ELF qui n'est pas alignée"
-#: elf/dl-load.c:1131
+#: elf/dl-load.c:1137
msgid "ELF load command address/offset not properly aligned"
msgstr "Commande de chargement sur une adresse ELF incorrectement alignée"
-#: elf/dl-load.c:1216
+#: elf/dl-load.c:1222
msgid "cannot allocate TLS data structures for initial thread"
msgstr "ne peut allouer une structure de données TLS pour un thread initial"
-#: elf/dl-load.c:1239
+#: elf/dl-load.c:1245
msgid "cannot handle TLS data"
msgstr "ne peut traiter les données TLS"
-#: elf/dl-load.c:1258
+#: elf/dl-load.c:1264
msgid "object file has no loadable segments"
msgstr "le fichier objet n'a pas de segment chargeable"
-#: elf/dl-load.c:1294
+#: elf/dl-load.c:1300
msgid "failed to map segment from shared object"
msgstr "échec d'adressage (mapping) du segment de l'objet partagé"
-#: elf/dl-load.c:1320
+#: elf/dl-load.c:1326
msgid "cannot dynamically load executable"
msgstr "ne peut dynamiquement charger un exécutable"
-#: elf/dl-load.c:1383 elf/dl-load.c:1492
+#: elf/dl-load.c:1389 elf/dl-load.c:1498
msgid "cannot change memory protections"
msgstr "ne peut modifier les protections de mémoire"
-#: elf/dl-load.c:1402
+#: elf/dl-load.c:1408
msgid "cannot map zero-fill pages"
msgstr "ne peut adresser des pages remplies de zéros"
-#: elf/dl-load.c:1416
+#: elf/dl-load.c:1422
msgid "object file has no dynamic section"
msgstr "le fichier objet n'a pas de section dynamique"
-#: elf/dl-load.c:1439
+#: elf/dl-load.c:1445
msgid "shared object cannot be dlopen()ed"
msgstr "l'objet partagé ne peut pas être ouvert via dlopen()"
-#: elf/dl-load.c:1452
+#: elf/dl-load.c:1458
msgid "cannot allocate memory for program header"
msgstr "ne peut allouer de la mémoire pour une en-tête de programme"
-#: elf/dl-load.c:1469 elf/dl-open.c:195
+#: elf/dl-load.c:1475 elf/dl-open.c:195
msgid "invalid caller"
msgstr "appelant invalide"
-#: elf/dl-load.c:1512
+#: elf/dl-load.c:1518
msgid "cannot enable executable stack as shared object requires"
msgstr "ne peut activer une pile exécutable comme l'objet partagé le requiert"
-#: elf/dl-load.c:1525
+#: elf/dl-load.c:1531
msgid "cannot close file descriptor"
msgstr "ne peut pas fermer le descripteur de fichier"
-#: elf/dl-load.c:1755
+#: elf/dl-load.c:1761
msgid "file too short"
msgstr "fichier trop court"
-#: elf/dl-load.c:1791
+#: elf/dl-load.c:1797
msgid "invalid ELF header"
msgstr "en-tête ELF invalide"
-#: elf/dl-load.c:1803
+#: elf/dl-load.c:1809
msgid "ELF file data encoding not big-endian"
msgstr "l'encodage des données du fichier ELF n'est pas big-endian"
-#: elf/dl-load.c:1805
+#: elf/dl-load.c:1811
msgid "ELF file data encoding not little-endian"
msgstr "l'encodage des données du fichier ELF n'est pas little-endian"
-#: elf/dl-load.c:1809
+#: elf/dl-load.c:1815
msgid "ELF file version ident does not match current one"
msgstr "l'identifiant de version du fichier ELF ne concorde pas avec la version courante"
-#: elf/dl-load.c:1813
+#: elf/dl-load.c:1819
msgid "ELF file OS ABI invalid"
msgstr "Système d'exploitation du fichier ELF ABI invalide"
-#: elf/dl-load.c:1816
+#: elf/dl-load.c:1822
msgid "ELF file ABI version invalid"
msgstr "Version du fichier ELF ABI invalide"
-#: elf/dl-load.c:1819
+#: elf/dl-load.c:1825
msgid "nonzero padding in e_ident"
msgstr "remplissage sans zéro dans e_ident"
-#: elf/dl-load.c:1822
+#: elf/dl-load.c:1828
msgid "internal error"
msgstr "Erreur interne"
-#: elf/dl-load.c:1829
+#: elf/dl-load.c:1835
msgid "ELF file version does not match current one"
msgstr "Version du fichier ELF ne concorde pas avec la version courante"
-#: elf/dl-load.c:1837
+#: elf/dl-load.c:1843
msgid "only ET_DYN and ET_EXEC can be loaded"
msgstr "Seuls ET_DYN et ET_EXEC peuvent être chargés"
-#: elf/dl-load.c:1843
+#: elf/dl-load.c:1849
msgid "ELF file's phentsize not the expected size"
msgstr "« Phentize » du fichier ELF ne concorde pas avec la taille prévue"
-#: elf/dl-load.c:2361
+#: elf/dl-load.c:2367
msgid "wrong ELF class: ELFCLASS64"
msgstr "mauvaise classe ELF : ELFCLASS64"
-#: elf/dl-load.c:2362
+#: elf/dl-load.c:2368
msgid "wrong ELF class: ELFCLASS32"
msgstr "mauvaise classe ELF : ELFCLASS32"
-#: elf/dl-load.c:2365
+#: elf/dl-load.c:2371
msgid "cannot open shared object file"
msgstr "Ne peut ouvrir le fichier d'objet partagé"
-#: elf/dl-lookup.c:753 ports/sysdeps/mips/dl-lookup.c:771
+#: elf/dl-lookup.c:753 ports/sysdeps/mips/dl-lookup.c:770
msgid "relocation error"
msgstr "erreur de réaffectation"
-#: elf/dl-lookup.c:780 ports/sysdeps/mips/dl-lookup.c:798
+#: elf/dl-lookup.c:780 ports/sysdeps/mips/dl-lookup.c:797
msgid "symbol lookup error"
msgstr "erreur de recherche de symbole"
@@ -665,41 +665,41 @@ msgstr "Le compteur de génération TLS a bouclé ! SVP expédier un rapport av
msgid "cannot load any more object with static TLS"
msgstr "ne peut pas charger plus d'objets avec TLS statique"
-#: elf/dl-open.c:599
+#: elf/dl-open.c:602
msgid "invalid mode for dlopen()"
msgstr "mode invalide pour dlopen()"
-#: elf/dl-open.c:616
+#: elf/dl-open.c:619
msgid "no more namespaces available for dlmopen()"
msgstr "plus d'espace de nommage disponible pour dlmopen()"
-#: elf/dl-open.c:634
+#: elf/dl-open.c:637
msgid "invalid target namespace in dlmopen()"
msgstr "espace de nommage cible invalide dans dlmopen()"
-#: elf/dl-reloc.c:120
+#: elf/dl-reloc.c:158
msgid "cannot allocate memory in static TLS block"
msgstr "ne peut allouer de la mémoire dans un bloc statique TLS"
-#: elf/dl-reloc.c:212
+#: elf/dl-reloc.c:250
msgid "cannot make segment writable for relocation"
msgstr "ne peut rendre le segment inscritible pour une réaffectation"
-#: elf/dl-reloc.c:275
+#: elf/dl-reloc.c:313
#, c-format
msgid "%s: no PLTREL found in object %s\n"
msgstr "%s : aucun PLTREL trouvé dans l'objet %s\n"
-#: elf/dl-reloc.c:286
+#: elf/dl-reloc.c:324
#, c-format
msgid "%s: out of memory to store relocation results for %s\n"
msgstr "%s : manque de mémoire pour stocker les résultats de la réaffectation pour %s\n"
-#: elf/dl-reloc.c:302
+#: elf/dl-reloc.c:340
msgid "cannot restore segment prot after reloc"
msgstr "ne peut restaurer le segment prot après reloc"
-#: elf/dl-reloc.c:331
+#: elf/dl-reloc.c:369
msgid "cannot apply additional memory protection after relocation"
msgstr "ne peut appliquer les protections additionnelle de mémoire après la réaffectation"
@@ -707,7 +707,7 @@ msgstr "ne peut appliquer les protections additionnelle de mémoire après la rÃ
msgid "RTLD_NEXT used in code not dynamically loaded"
msgstr "RTLD_NEXT est utilisé dans du code qui n'est pas chargé dynamiquement"
-#: elf/dl-tls.c:875
+#: elf/dl-tls.c:923
msgid "cannot create TLS data structures"
msgstr "ne peut créer les structures de données TLS"
@@ -967,38 +967,38 @@ msgstr "ldd : option \\`$1' est ambiguë"
msgid "unrecognized option"
msgstr "option non reconnue"
-#: elf/ldd.bash.in:88 elf/ldd.bash.in:126
+#: elf/ldd.bash.in:88 elf/ldd.bash.in:125
msgid "Try \\`ldd --help' for more information."
msgstr "Pour en savoir davantage, faites : \\`ldd --help'."
-#: elf/ldd.bash.in:125
+#: elf/ldd.bash.in:124
msgid "missing file arguments"
msgstr "arguments de fichier manquants"
#. TRANS No such file or directory. This is a ``file doesn't exist'' error
#. TRANS for ordinary files that are referenced in contexts where they are
#. TRANS expected to already exist.
-#: elf/ldd.bash.in:148 sysdeps/gnu/errlist.c:36
+#: elf/ldd.bash.in:147 sysdeps/gnu/errlist.c:36
msgid "No such file or directory"
msgstr "Aucun fichier ou dossier de ce type"
-#: elf/ldd.bash.in:151 inet/rcmd.c:488
+#: elf/ldd.bash.in:150 inet/rcmd.c:488
msgid "not regular file"
msgstr "n'est pas un fichier régulier"
-#: elf/ldd.bash.in:154
+#: elf/ldd.bash.in:153
msgid "warning: you do not have execution permission for"
msgstr "attention : vous n'avez pas la permission d'exécution pour"
-#: elf/ldd.bash.in:183
+#: elf/ldd.bash.in:182
msgid "\tnot a dynamic executable"
msgstr "\tn'est pas un exécutable dynamique"
-#: elf/ldd.bash.in:191
+#: elf/ldd.bash.in:190
msgid "exited with unknown exit code"
msgstr "a quitté avec un code retour inconnu"
-#: elf/ldd.bash.in:196
+#: elf/ldd.bash.in:195
msgid "error: you do not have read permission for"
msgstr "erreur : vous n'avez pas de permission de lecture pour"
@@ -1412,7 +1412,7 @@ msgstr "Information :"
msgid "list all known coded character sets"
msgstr "Liste tous les jeux de code de caractères"
-#: iconv/iconv_prog.c:64 locale/programs/localedef.c:127
+#: iconv/iconv_prog.c:64 locale/programs/localedef.c:129
msgid "Output control:"
msgstr "Contrôle de sortie :"
@@ -1421,8 +1421,8 @@ msgid "omit invalid characters from output"
msgstr "omission de caractères invalides à la sortie"
#: iconv/iconv_prog.c:66 iconv/iconvconfig.c:128
-#: locale/programs/localedef.c:120 locale/programs/localedef.c:122
-#: locale/programs/localedef.c:124 locale/programs/localedef.c:145
+#: locale/programs/localedef.c:122 locale/programs/localedef.c:124
+#: locale/programs/localedef.c:126 locale/programs/localedef.c:147
#: malloc/memusagestat.c:56
msgid "FILE"
msgstr "FICHIER"
@@ -1499,16 +1499,16 @@ msgstr "erreur inconnue de iconv() %d"
#: iconv/iconv_prog.c:791
msgid ""
-"The following list contain all the coded character sets known. This does\n"
+"The following list contains all the coded character sets known. This does\n"
"not necessarily mean that all combinations of these names can be used for\n"
"the FROM and TO command line parameters. One coded character set can be\n"
"listed with several different names (aliases).\n"
"\n"
" "
msgstr ""
-"La liste suivante contient tous les jeux des codes de caractères connus. Ceci\n"
+"La liste suivante contient tous les jeux de code de caractères connus. Ceci\n"
"ne signifie pas nécessairement que toutes les combinaisons de ces noms peuvent\n"
-"être utilisées dans les paramètres « FROM » et « TO » des commandes. Un jeu de codes de\n"
+"être utilisées dans les paramètres des commandes FROM et TO en ligne. Un jeu de codes de\n"
"caractères peut être affiché avec différents noms (aliases).\n"
"\n"
" "
@@ -1521,7 +1521,7 @@ msgstr "Création d'un module iconv de chargement rapide du fichier de configura
msgid "[DIR...]"
msgstr "[RÉPERTOIRE...]"
-#: iconv/iconvconfig.c:126 locale/programs/localedef.c:131
+#: iconv/iconvconfig.c:126 locale/programs/localedef.c:133
msgid "PATH"
msgstr "PATH"
@@ -1542,7 +1542,7 @@ msgstr "Ne cherche pas les répertoires standards, seulement ceux sur la ligne d
msgid "Directory arguments required when using --nostdlib"
msgstr "Arguments de répertoires requis avec --nostdlib"
-#: iconv/iconvconfig.c:341 locale/programs/localedef.c:288
+#: iconv/iconvconfig.c:341 locale/programs/localedef.c:294
#, c-format
msgid "no output file produced because warnings were issued"
msgstr "aucun fichier de sortie généré en raison d'avertissements émis"
@@ -1678,8 +1678,8 @@ msgstr "erreur de syntaxe du prologue : %s"
msgid "invalid definition"
msgstr "définition invalide"
-#: locale/programs/charmap.c:375 locale/programs/locfile.c:125
-#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175
+#: locale/programs/charmap.c:375 locale/programs/locfile.c:131
+#: locale/programs/locfile.c:158 locale/programs/repertoire.c:175
msgid "bad argument"
msgstr "mauvais argument"
@@ -1737,14 +1737,14 @@ msgstr "trop d'octets pour l'encodage des caractères"
msgid "no symbolic name given for end of range"
msgstr "pas de nom symbolique fourni pour la fin de l'intervalle"
-#: locale/programs/charmap.c:610 locale/programs/ld-address.c:602
-#: locale/programs/ld-collate.c:2767 locale/programs/ld-collate.c:3925
-#: locale/programs/ld-ctype.c:2256 locale/programs/ld-ctype.c:3007
-#: locale/programs/ld-identification.c:452
-#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332
-#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:307
-#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241
-#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221
+#: locale/programs/charmap.c:610 locale/programs/ld-address.c:528
+#: locale/programs/ld-collate.c:2626 locale/programs/ld-collate.c:3784
+#: locale/programs/ld-ctype.c:2159 locale/programs/ld-ctype.c:2910
+#: locale/programs/ld-identification.c:368
+#: locale/programs/ld-measurement.c:215 locale/programs/ld-messages.c:298
+#: locale/programs/ld-monetary.c:740 locale/programs/ld-name.c:264
+#: locale/programs/ld-numeric.c:326 locale/programs/ld-paper.c:214
+#: locale/programs/ld-telephone.c:278 locale/programs/ld-time.c:943
#: locale/programs/repertoire.c:313
#, c-format
msgid "%1$s: definition does not end with `END %1$s'"
@@ -1766,15 +1766,15 @@ msgstr "la valeur de %s doit être un entier"
msgid "%s: error in state machine"
msgstr "%s : erreur de l'automate à états finis"
-#: locale/programs/charmap.c:850 locale/programs/ld-address.c:618
-#: locale/programs/ld-collate.c:2764 locale/programs/ld-collate.c:4118
-#: locale/programs/ld-ctype.c:2253 locale/programs/ld-ctype.c:3024
-#: locale/programs/ld-identification.c:468
-#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348
-#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:323
-#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257
-#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237
-#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324
+#: locale/programs/charmap.c:850 locale/programs/ld-address.c:544
+#: locale/programs/ld-collate.c:2623 locale/programs/ld-collate.c:3977
+#: locale/programs/ld-ctype.c:2156 locale/programs/ld-ctype.c:2927
+#: locale/programs/ld-identification.c:384
+#: locale/programs/ld-measurement.c:231 locale/programs/ld-messages.c:314
+#: locale/programs/ld-monetary.c:756 locale/programs/ld-name.c:280
+#: locale/programs/ld-numeric.c:342 locale/programs/ld-paper.c:230
+#: locale/programs/ld-telephone.c:294 locale/programs/ld-time.c:959
+#: locale/programs/locfile.c:1000 locale/programs/repertoire.c:324
#, c-format
msgid "%s: premature end of file"
msgstr "%s : fin prématurée du fichier"
@@ -1789,7 +1789,7 @@ msgstr "caractère inconnu « %s »"
msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
msgstr "nombre d'octets pour une séquence d'octets de début et de fin de plage n'est pas le même : %d vs %d"
-#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3044
+#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2903
#: locale/programs/repertoire.c:419
msgid "invalid names for character range"
msgstr "nom invalide pour un intervalle de caractères"
@@ -1811,8 +1811,8 @@ msgstr "la limite supérieure de l'intervalle est plus basse que la limite infé
msgid "resulting bytes for range not representable."
msgstr "les octets résultants pour la plage ne sont pas représentables."
-#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1558
-#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:133
+#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1565
+#: locale/programs/ld-ctype.c:462 locale/programs/ld-identification.c:133
#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97
#: locale/programs/ld-monetary.c:193 locale/programs/ld-name.c:94
#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91
@@ -1875,524 +1875,524 @@ msgstr "%s : valeur « %s » ne concorde pas avec la valeur « %s »"
msgid "%s: numeric country code `%d' not valid"
msgstr "%s : code numérique invalide pour le pays « %d »"
-#: locale/programs/ld-address.c:510 locale/programs/ld-address.c:547
-#: locale/programs/ld-address.c:585 locale/programs/ld-ctype.c:2631
-#: locale/programs/ld-identification.c:364
-#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301
-#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735
-#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:280
-#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224
-#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126
-#: locale/programs/ld-time.c:1168
+#: locale/programs/ld-address.c:436 locale/programs/ld-address.c:473
+#: locale/programs/ld-address.c:511 locale/programs/ld-ctype.c:2534
+#: locale/programs/ld-identification.c:280
+#: locale/programs/ld-measurement.c:198 locale/programs/ld-messages.c:267
+#: locale/programs/ld-monetary.c:495 locale/programs/ld-monetary.c:530
+#: locale/programs/ld-monetary.c:571 locale/programs/ld-name.c:237
+#: locale/programs/ld-numeric.c:218 locale/programs/ld-paper.c:197
+#: locale/programs/ld-telephone.c:253 locale/programs/ld-time.c:848
+#: locale/programs/ld-time.c:890
#, c-format
msgid "%s: field `%s' declared more than once"
msgstr "%s : champ « %s » déclaré plus d'une fois"
-#: locale/programs/ld-address.c:514 locale/programs/ld-address.c:552
-#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311
-#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739
-#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267
-#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020
-#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131
+#: locale/programs/ld-address.c:440 locale/programs/ld-address.c:478
+#: locale/programs/ld-identification.c:284 locale/programs/ld-messages.c:277
+#: locale/programs/ld-monetary.c:499 locale/programs/ld-monetary.c:534
+#: locale/programs/ld-name.c:241 locale/programs/ld-numeric.c:222
+#: locale/programs/ld-telephone.c:257 locale/programs/ld-time.c:742
+#: locale/programs/ld-time.c:811 locale/programs/ld-time.c:853
#, c-format
msgid "%s: unknown character in field `%s'"
msgstr "%s : caractère inconnu dans le champ « %s »"
-#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:3923
-#: locale/programs/ld-ctype.c:3004 locale/programs/ld-identification.c:449
-#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330
-#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:305
-#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239
-#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219
+#: locale/programs/ld-address.c:525 locale/programs/ld-collate.c:3782
+#: locale/programs/ld-ctype.c:2907 locale/programs/ld-identification.c:365
+#: locale/programs/ld-measurement.c:212 locale/programs/ld-messages.c:296
+#: locale/programs/ld-monetary.c:738 locale/programs/ld-name.c:262
+#: locale/programs/ld-numeric.c:324 locale/programs/ld-paper.c:212
+#: locale/programs/ld-telephone.c:276 locale/programs/ld-time.c:941
#, c-format
msgid "%s: incomplete `END' line"
msgstr "%s : ligne « END » incomplète"
-#: locale/programs/ld-address.c:609 locale/programs/ld-collate.c:544
-#: locale/programs/ld-collate.c:596 locale/programs/ld-collate.c:892
-#: locale/programs/ld-collate.c:905 locale/programs/ld-collate.c:2733
-#: locale/programs/ld-collate.c:2754 locale/programs/ld-collate.c:4108
-#: locale/programs/ld-ctype.c:1985 locale/programs/ld-ctype.c:2243
-#: locale/programs/ld-ctype.c:2829 locale/programs/ld-ctype.c:3015
-#: locale/programs/ld-identification.c:459
-#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339
-#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:314
-#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248
-#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228
+#: locale/programs/ld-address.c:535 locale/programs/ld-collate.c:551
+#: locale/programs/ld-collate.c:603 locale/programs/ld-collate.c:899
+#: locale/programs/ld-collate.c:912 locale/programs/ld-collate.c:2592
+#: locale/programs/ld-collate.c:2613 locale/programs/ld-collate.c:3967
+#: locale/programs/ld-ctype.c:1888 locale/programs/ld-ctype.c:2146
+#: locale/programs/ld-ctype.c:2732 locale/programs/ld-ctype.c:2918
+#: locale/programs/ld-identification.c:375
+#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:305
+#: locale/programs/ld-monetary.c:747 locale/programs/ld-name.c:271
+#: locale/programs/ld-numeric.c:333 locale/programs/ld-paper.c:221
+#: locale/programs/ld-telephone.c:285 locale/programs/ld-time.c:950
#, c-format
msgid "%s: syntax error"
msgstr "%s : erreur de syntaxe"
-#: locale/programs/ld-collate.c:419
+#: locale/programs/ld-collate.c:426
#, c-format
msgid "`%.*s' already defined in charmap"
msgstr "« %.*s » déjà défini dans la table des caractères"
-#: locale/programs/ld-collate.c:428
+#: locale/programs/ld-collate.c:435
#, c-format
msgid "`%.*s' already defined in repertoire"
msgstr "« %.*s » déjà défini dans le dossier"
-#: locale/programs/ld-collate.c:435
+#: locale/programs/ld-collate.c:442
#, c-format
msgid "`%.*s' already defined as collating symbol"
msgstr "« %.*s » déjà défini comme symbole de classement (collation)"
-#: locale/programs/ld-collate.c:442
+#: locale/programs/ld-collate.c:449
#, c-format
msgid "`%.*s' already defined as collating element"
msgstr "« %.*s » déjà défini comme élément de classement (collation)"
-#: locale/programs/ld-collate.c:473 locale/programs/ld-collate.c:499
+#: locale/programs/ld-collate.c:480 locale/programs/ld-collate.c:506
#, c-format
msgid "%s: `forward' and `backward' are mutually excluding each other"
msgstr "%s : « forward » et « backward » sont mutuellement exclusifs"
-#: locale/programs/ld-collate.c:483 locale/programs/ld-collate.c:509
-#: locale/programs/ld-collate.c:525
+#: locale/programs/ld-collate.c:490 locale/programs/ld-collate.c:516
+#: locale/programs/ld-collate.c:532
#, c-format
msgid "%s: `%s' mentioned more than once in definition of weight %d"
msgstr "%s : « %s » mentionné plus d'une fois dans la définition du poids %d"
-#: locale/programs/ld-collate.c:581
+#: locale/programs/ld-collate.c:588
#, c-format
msgid "%s: too many rules; first entry only had %d"
msgstr "%s : trop de règles; la 1ère entrée n'a que %d"
-#: locale/programs/ld-collate.c:617
+#: locale/programs/ld-collate.c:624
#, c-format
msgid "%s: not enough sorting rules"
msgstr "%s : pas assez de règles de tri"
-#: locale/programs/ld-collate.c:782
+#: locale/programs/ld-collate.c:789
#, c-format
msgid "%s: empty weight string not allowed"
msgstr "%s : chaîne de poids vide non permise"
-#: locale/programs/ld-collate.c:877
+#: locale/programs/ld-collate.c:884
#, c-format
msgid "%s: weights must use the same ellipsis symbol as the name"
msgstr "%s : les poids doivent utiliser les mêmes symboles d'ellipse que les noms"
-#: locale/programs/ld-collate.c:933
+#: locale/programs/ld-collate.c:940
#, c-format
msgid "%s: too many values"
msgstr "%s : trop de valeurs"
-#: locale/programs/ld-collate.c:1053 locale/programs/ld-collate.c:1228
+#: locale/programs/ld-collate.c:1060 locale/programs/ld-collate.c:1235
#, c-format
msgid "order for `%.*s' already defined at %s:%Zu"
msgstr "L'ordre de « %.*s » est déjà défini dans %s :%Zu"
-#: locale/programs/ld-collate.c:1103
+#: locale/programs/ld-collate.c:1110
#, c-format
msgid "%s: the start and the end symbol of a range must stand for characters"
msgstr "%s : le symbole de départ et de fin d'une plage doit être en caractères"
-#: locale/programs/ld-collate.c:1130
+#: locale/programs/ld-collate.c:1137
#, c-format
msgid "%s: byte sequences of first and last character must have the same length"
msgstr "%s : séquences d'octets du 1er et dernier caractère doivent avoir la même longueur"
-#: locale/programs/ld-collate.c:1172
+#: locale/programs/ld-collate.c:1179
#, c-format
msgid "%s: byte sequence of first character of range is not lower than that of the last character"
msgstr "%s : séquence d'octet du 1er caractère d'un intervalle n'est pas plus petit que celle du dernier caractère"
-#: locale/programs/ld-collate.c:1297
+#: locale/programs/ld-collate.c:1304
#, c-format
msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
msgstr "%s : plage de l'ellipse symbolique ne doit pas être suivie directement de « order_start »"
-#: locale/programs/ld-collate.c:1301
+#: locale/programs/ld-collate.c:1308
#, c-format
msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
msgstr "%s : plage de l'ellipse symbolique ne doit pas être suivie directement de « order_end »"
-#: locale/programs/ld-collate.c:1321 locale/programs/ld-ctype.c:1502
+#: locale/programs/ld-collate.c:1328 locale/programs/ld-ctype.c:1405
#, c-format
msgid "`%s' and `%.*s' are not valid names for symbolic range"
msgstr "« %s » et « %.*s » sont des noms invalides pour un intervalle symbolique"
-#: locale/programs/ld-collate.c:1371 locale/programs/ld-collate.c:3859
+#: locale/programs/ld-collate.c:1378 locale/programs/ld-collate.c:3718
#, c-format
msgid "%s: order for `%.*s' already defined at %s:%Zu"
msgstr "%s : ordre de « %.*s » déjà défini comme %s:%Zu"
-#: locale/programs/ld-collate.c:1380
+#: locale/programs/ld-collate.c:1387
#, c-format
msgid "%s: `%s' must be a character"
msgstr "%s : « %s » doit être un caractère"
-#: locale/programs/ld-collate.c:1575
+#: locale/programs/ld-collate.c:1582
#, c-format
msgid "%s: `position' must be used for a specific level in all sections or none"
msgstr "%s : « position » doit être utilisé pour un niveau spécifique dans toutes les sections ou aucune"
-#: locale/programs/ld-collate.c:1600
+#: locale/programs/ld-collate.c:1607
#, c-format
msgid "symbol `%s' not defined"
msgstr "Symbole « %s » n'est pas défini"
-#: locale/programs/ld-collate.c:1676 locale/programs/ld-collate.c:1782
+#: locale/programs/ld-collate.c:1683 locale/programs/ld-collate.c:1789
#, c-format
msgid "symbol `%s' has the same encoding as"
msgstr "Symbole « %s » a le même encodage que"
-#: locale/programs/ld-collate.c:1680 locale/programs/ld-collate.c:1786
+#: locale/programs/ld-collate.c:1687 locale/programs/ld-collate.c:1793
#, c-format
msgid "symbol `%s'"
msgstr "Symbole « %s »"
-#: locale/programs/ld-collate.c:1828
+#: locale/programs/ld-collate.c:1833
#, c-format
msgid "no definition of `UNDEFINED'"
msgstr "Pas de définition de type « UNDEFINED »"
-#: locale/programs/ld-collate.c:1857
+#: locale/programs/ld-collate.c:1862
#, c-format
msgid "too many errors; giving up"
msgstr "trop d'erreurs; abandon"
-#: locale/programs/ld-collate.c:2659 locale/programs/ld-collate.c:4047
+#: locale/programs/ld-collate.c:2518 locale/programs/ld-collate.c:3906
#, c-format
msgid "%s: nested conditionals not supported"
msgstr "%s : conditions imbriquées non supportées"
-#: locale/programs/ld-collate.c:2677
+#: locale/programs/ld-collate.c:2536
#, c-format
-msgid "%s: more then one 'else'"
-msgstr "%s : plus puis 1 'else'"
+msgid "%s: more than one 'else'"
+msgstr "%s : plus d'un 'else'"
-#: locale/programs/ld-collate.c:2852
+#: locale/programs/ld-collate.c:2711
#, c-format
msgid "%s: duplicate definition of `%s'"
msgstr "%s : double définition de « %s »"
-#: locale/programs/ld-collate.c:2888
+#: locale/programs/ld-collate.c:2747
#, c-format
msgid "%s: duplicate declaration of section `%s'"
msgstr "%s : double déclaration de section « %s »"
-#: locale/programs/ld-collate.c:3024
+#: locale/programs/ld-collate.c:2883
#, c-format
msgid "%s: unknown character in collating symbol name"
msgstr "%s : caractère inconnu dans le nom du symbole de collation"
-#: locale/programs/ld-collate.c:3153
+#: locale/programs/ld-collate.c:3012
#, c-format
msgid "%s: unknown character in equivalent definition name"
msgstr "%s : caractère inconnu dans la définition équivalent d'un nom"
-#: locale/programs/ld-collate.c:3164
+#: locale/programs/ld-collate.c:3023
#, c-format
msgid "%s: unknown character in equivalent definition value"
msgstr "%s : caractère inconnu dans la définition équivalente d'une valeur"
-#: locale/programs/ld-collate.c:3174
+#: locale/programs/ld-collate.c:3033
#, c-format
msgid "%s: unknown symbol `%s' in equivalent definition"
msgstr "%s : symbole inconnu « %s » dans une définition équivalente"
-#: locale/programs/ld-collate.c:3183
+#: locale/programs/ld-collate.c:3042
msgid "error while adding equivalent collating symbol"
msgstr "Erreur lors de l'ajout d'un symbole de collation équivalent"
-#: locale/programs/ld-collate.c:3221
+#: locale/programs/ld-collate.c:3080
#, c-format
msgid "duplicate definition of script `%s'"
msgstr "Double définitions du script « %s »"
-#: locale/programs/ld-collate.c:3269
+#: locale/programs/ld-collate.c:3128
#, c-format
msgid "%s: unknown section name `%.*s'"
msgstr "%s : nom de section inconnu `% *s'"
-#: locale/programs/ld-collate.c:3298
+#: locale/programs/ld-collate.c:3157
#, c-format
msgid "%s: multiple order definitions for section `%s'"
msgstr "%s : définitions d'ordre multiple de la section « %s »"
-#: locale/programs/ld-collate.c:3326
+#: locale/programs/ld-collate.c:3185
#, c-format
msgid "%s: invalid number of sorting rules"
msgstr "%s : nombre invalide de règles de tri"
-#: locale/programs/ld-collate.c:3353
+#: locale/programs/ld-collate.c:3212
#, c-format
msgid "%s: multiple order definitions for unnamed section"
msgstr "%s : définitions d'ordre multiple pour une section sans nom"
-#: locale/programs/ld-collate.c:3408 locale/programs/ld-collate.c:3538
-#: locale/programs/ld-collate.c:3901
+#: locale/programs/ld-collate.c:3267 locale/programs/ld-collate.c:3397
+#: locale/programs/ld-collate.c:3760
#, c-format
msgid "%s: missing `order_end' keyword"
msgstr "%s : mot clé « order_end » manquant"
-#: locale/programs/ld-collate.c:3471
+#: locale/programs/ld-collate.c:3330
#, c-format
msgid "%s: order for collating symbol %.*s not yet defined"
msgstr "%s : ordre de fusionnement de symboles %.*s n'est pas encore défini"
-#: locale/programs/ld-collate.c:3489
+#: locale/programs/ld-collate.c:3348
#, c-format
msgid "%s: order for collating element %.*s not yet defined"
msgstr "%s : ordre de fusionnement d'éléments %.*s n'est pas encore défini"
-#: locale/programs/ld-collate.c:3500
+#: locale/programs/ld-collate.c:3359
#, c-format
msgid "%s: cannot reorder after %.*s: symbol not known"
msgstr "%s : ne peut réordonner après %.*s : symbole inconnu"
-#: locale/programs/ld-collate.c:3552 locale/programs/ld-collate.c:3913
+#: locale/programs/ld-collate.c:3411 locale/programs/ld-collate.c:3772
#, c-format
msgid "%s: missing `reorder-end' keyword"
msgstr "%s : mot clé « reorder-end » manquant"
-#: locale/programs/ld-collate.c:3586 locale/programs/ld-collate.c:3784
+#: locale/programs/ld-collate.c:3445 locale/programs/ld-collate.c:3643
#, c-format
msgid "%s: section `%.*s' not known"
msgstr "%s : section « %.*s » inconnue"
-#: locale/programs/ld-collate.c:3651
+#: locale/programs/ld-collate.c:3510
#, c-format
msgid "%s: bad symbol <%.*s>"
msgstr "%s : symbole erroné <%.*s>"
-#: locale/programs/ld-collate.c:3847
+#: locale/programs/ld-collate.c:3706
#, c-format
msgid "%s: cannot have `%s' as end of ellipsis range"
msgstr "%s : ne peut avoir « %s » à la fin d'une plage d'ellipse"
-#: locale/programs/ld-collate.c:3897
+#: locale/programs/ld-collate.c:3756
#, c-format
msgid "%s: empty category description not allowed"
msgstr "%s : description de catégorie vide non permise"
-#: locale/programs/ld-collate.c:3916
+#: locale/programs/ld-collate.c:3775
#, c-format
msgid "%s: missing `reorder-sections-end' keyword"
msgstr "%s : mot clé « reorder-sections-end » manquant"
-#: locale/programs/ld-collate.c:4080
+#: locale/programs/ld-collate.c:3939
#, c-format
msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
msgstr "%s : '%s' sans correspondance 'ifdef' ou 'ifndef'"
-#: locale/programs/ld-collate.c:4098
+#: locale/programs/ld-collate.c:3957
#, c-format
msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
msgstr "%s : 'endif' sans 'ifdef' ou 'ifndef' correspondant"
-#: locale/programs/ld-ctype.c:440
+#: locale/programs/ld-ctype.c:481
#, c-format
msgid "No character set name specified in charmap"
msgstr "Pas de nom de jeu caractères spéecifié dans la table des caractères"
-#: locale/programs/ld-ctype.c:469
+#: locale/programs/ld-ctype.c:510
#, c-format
msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
msgstr "Le caractère L'\\u%0*x» de la classe « %s » doit être dans la classe « %s »"
-#: locale/programs/ld-ctype.c:484
+#: locale/programs/ld-ctype.c:525
#, c-format
msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
msgstr "Le caractère L'\\u%0*x» de la classe « %s » ne doit pas être dans la classe « %s »"
-#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556
+#: locale/programs/ld-ctype.c:539 locale/programs/ld-ctype.c:597
#, c-format
msgid "internal error in %s, line %u"
msgstr "Erreur interne dans %s, ligne %u"
-#: locale/programs/ld-ctype.c:527
+#: locale/programs/ld-ctype.c:568
#, c-format
msgid "character '%s' in class `%s' must be in class `%s'"
msgstr "Caractère « %s » de la classe « %s » doit être dans la classe « %s »"
-#: locale/programs/ld-ctype.c:543
+#: locale/programs/ld-ctype.c:584
#, c-format
msgid "character '%s' in class `%s' must not be in class `%s'"
msgstr "Caractère « %s » de la classe « %s » ne doit pas être dans la classe « %s »"
-#: locale/programs/ld-ctype.c:573 locale/programs/ld-ctype.c:611
+#: locale/programs/ld-ctype.c:614 locale/programs/ld-ctype.c:652
#, c-format
msgid "<SP> character not in class `%s'"
msgstr "Le caractère <SP> n'est pas dans la classe « %s »"
-#: locale/programs/ld-ctype.c:585 locale/programs/ld-ctype.c:622
+#: locale/programs/ld-ctype.c:626 locale/programs/ld-ctype.c:663
#, c-format
msgid "<SP> character must not be in class `%s'"
msgstr "Le caractère <SP> ne doit pas être dans la classe « %s »"
-#: locale/programs/ld-ctype.c:600
+#: locale/programs/ld-ctype.c:641
#, c-format
msgid "character <SP> not defined in character map"
msgstr "Caractère <SP> non défini dans la table des caractères"
-#: locale/programs/ld-ctype.c:736
+#: locale/programs/ld-ctype.c:777
#, c-format
msgid "`digit' category has not entries in groups of ten"
msgstr "catégorie « digit » n'a pas d'entrées dans les groupe des dizaines"
-#: locale/programs/ld-ctype.c:785
+#: locale/programs/ld-ctype.c:826
#, c-format
msgid "no input digits defined and none of the standard names in the charmap"
msgstr "Pas de chiffre défini et aucun des noms standards dans la table des caractères"
-#: locale/programs/ld-ctype.c:850
+#: locale/programs/ld-ctype.c:891
#, c-format
msgid "not all characters used in `outdigit' are available in the charmap"
msgstr "Pas tous les caractères utilisés dans « outdigit » sont disponibles dans la table des caractères"
-#: locale/programs/ld-ctype.c:867
+#: locale/programs/ld-ctype.c:908
#, c-format
msgid "not all characters used in `outdigit' are available in the repertoire"
msgstr "Pas tous les caractères utilisés dans « outdigit » sont disponibles dans le dossier"
-#: locale/programs/ld-ctype.c:1270
+#: locale/programs/ld-ctype.c:1173
#, c-format
msgid "character class `%s' already defined"
msgstr "Classe de caractères « %s » déjà définie"
-#: locale/programs/ld-ctype.c:1276
+#: locale/programs/ld-ctype.c:1179
#, c-format
msgid "implementation limit: no more than %Zd character classes allowed"
msgstr "Limite d'implantation : pas plus de %Zd classes de caractères permises"
-#: locale/programs/ld-ctype.c:1302
+#: locale/programs/ld-ctype.c:1205
#, c-format
msgid "character map `%s' already defined"
msgstr "Table de caractères « %s » déjà définie"
-#: locale/programs/ld-ctype.c:1308
+#: locale/programs/ld-ctype.c:1211
#, c-format
msgid "implementation limit: no more than %d character maps allowed"
msgstr "Limite d'implantation : pas plus de %d tables de caractères sont permises"
-#: locale/programs/ld-ctype.c:1573 locale/programs/ld-ctype.c:1698
-#: locale/programs/ld-ctype.c:1804 locale/programs/ld-ctype.c:2494
-#: locale/programs/ld-ctype.c:3490
+#: locale/programs/ld-ctype.c:1476 locale/programs/ld-ctype.c:1601
+#: locale/programs/ld-ctype.c:1707 locale/programs/ld-ctype.c:2397
+#: locale/programs/ld-ctype.c:3393
#, c-format
msgid "%s: field `%s' does not contain exactly ten entries"
msgstr "%s : champ « %s » ne contient pas exactement 10 entrées"
-#: locale/programs/ld-ctype.c:1601 locale/programs/ld-ctype.c:2175
+#: locale/programs/ld-ctype.c:1504 locale/programs/ld-ctype.c:2078
#, c-format
msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
msgstr "Valeur-finale <U%0*X> de l'intervalle est plus petite que la valeur-départ <U%0*X>"
-#: locale/programs/ld-ctype.c:1728
+#: locale/programs/ld-ctype.c:1631
msgid "start and end character sequence of range must have the same length"
msgstr "Début et fin de l'intervalle de la séquence de caractères doivent avoir la même longueur"
-#: locale/programs/ld-ctype.c:1735
+#: locale/programs/ld-ctype.c:1638
msgid "to-value character sequence is smaller than from-value sequence"
msgstr "Valeur finale de la séquence des caractères est plus petite que la valeur de départ"
-#: locale/programs/ld-ctype.c:2095 locale/programs/ld-ctype.c:2146
+#: locale/programs/ld-ctype.c:1998 locale/programs/ld-ctype.c:2049
msgid "premature end of `translit_ignore' definition"
msgstr "Fin prématurée de la définition de « translit_ignore »"
-#: locale/programs/ld-ctype.c:2101 locale/programs/ld-ctype.c:2152
-#: locale/programs/ld-ctype.c:2194
+#: locale/programs/ld-ctype.c:2004 locale/programs/ld-ctype.c:2055
+#: locale/programs/ld-ctype.c:2097
msgid "syntax error"
msgstr "Erreur de syntaxe"
-#: locale/programs/ld-ctype.c:2327
+#: locale/programs/ld-ctype.c:2230
#, c-format
msgid "%s: syntax error in definition of new character class"
msgstr "%s : erreur de syntaxe dans la définition d'une nouvelle classe de caractères"
-#: locale/programs/ld-ctype.c:2342
+#: locale/programs/ld-ctype.c:2245
#, c-format
msgid "%s: syntax error in definition of new character map"
msgstr "%s : erreur de syntaxe dans la définition d'une nouvelle table de caractères"
-#: locale/programs/ld-ctype.c:2516
+#: locale/programs/ld-ctype.c:2419
msgid "ellipsis range must be marked by two operands of same type"
msgstr "Plage de l'ellipse doit être marqué par 2 opérandes du même type"
-#: locale/programs/ld-ctype.c:2525
+#: locale/programs/ld-ctype.c:2428
msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
msgstr "Les valeurs d'une plage de noms symboliques d'une ellipse absolue « .... » ne doivent pas être utilisés"
-#: locale/programs/ld-ctype.c:2540
+#: locale/programs/ld-ctype.c:2443
msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
msgstr "Les valeurs d'une plage UCS doivent utiliser une ellipse symbolique en hexadécimal « .. »"
-#: locale/programs/ld-ctype.c:2554
+#: locale/programs/ld-ctype.c:2457
msgid "with character code range values one must use the absolute ellipsis `...'"
msgstr "Les valeurs d'une plage de caractères doivent utiliser une ellipse absolu « ... »"
-#: locale/programs/ld-ctype.c:2705
+#: locale/programs/ld-ctype.c:2608
#, c-format
msgid "duplicated definition for mapping `%s'"
msgstr "Double définitions de la table « %s »"
-#: locale/programs/ld-ctype.c:2791 locale/programs/ld-ctype.c:2935
+#: locale/programs/ld-ctype.c:2694 locale/programs/ld-ctype.c:2838
#, c-format
msgid "%s: `translit_start' section does not end with `translit_end'"
msgstr "%s : la section « transit_start » n'est pas terminée par « translit_end »"
-#: locale/programs/ld-ctype.c:2886
+#: locale/programs/ld-ctype.c:2789
#, c-format
msgid "%s: duplicate `default_missing' definition"
msgstr "%s : double définition de « default_missing »"
-#: locale/programs/ld-ctype.c:2891
+#: locale/programs/ld-ctype.c:2794
msgid "previous definition was here"
msgstr "Le définition précédente était ici"
-#: locale/programs/ld-ctype.c:2913
+#: locale/programs/ld-ctype.c:2816
#, c-format
msgid "%s: no representable `default_missing' definition found"
msgstr "%s : aucune définition « default_missing » pour les non représentables"
-#: locale/programs/ld-ctype.c:3066 locale/programs/ld-ctype.c:3150
-#: locale/programs/ld-ctype.c:3170 locale/programs/ld-ctype.c:3191
-#: locale/programs/ld-ctype.c:3212 locale/programs/ld-ctype.c:3233
-#: locale/programs/ld-ctype.c:3254 locale/programs/ld-ctype.c:3294
-#: locale/programs/ld-ctype.c:3315 locale/programs/ld-ctype.c:3382
-#: locale/programs/ld-ctype.c:3424 locale/programs/ld-ctype.c:3449
+#: locale/programs/ld-ctype.c:2969 locale/programs/ld-ctype.c:3053
+#: locale/programs/ld-ctype.c:3073 locale/programs/ld-ctype.c:3094
+#: locale/programs/ld-ctype.c:3115 locale/programs/ld-ctype.c:3136
+#: locale/programs/ld-ctype.c:3157 locale/programs/ld-ctype.c:3197
+#: locale/programs/ld-ctype.c:3218 locale/programs/ld-ctype.c:3285
+#: locale/programs/ld-ctype.c:3327 locale/programs/ld-ctype.c:3352
#, c-format
msgid "%s: character `%s' not defined while needed as default value"
msgstr "%s : caractère « %s » non défini alors qu'attendu comme valeur par défaut"
-#: locale/programs/ld-ctype.c:3071 locale/programs/ld-ctype.c:3155
-#: locale/programs/ld-ctype.c:3175 locale/programs/ld-ctype.c:3196
-#: locale/programs/ld-ctype.c:3217 locale/programs/ld-ctype.c:3238
-#: locale/programs/ld-ctype.c:3259 locale/programs/ld-ctype.c:3299
-#: locale/programs/ld-ctype.c:3320 locale/programs/ld-ctype.c:3387
+#: locale/programs/ld-ctype.c:2974 locale/programs/ld-ctype.c:3058
+#: locale/programs/ld-ctype.c:3078 locale/programs/ld-ctype.c:3099
+#: locale/programs/ld-ctype.c:3120 locale/programs/ld-ctype.c:3141
+#: locale/programs/ld-ctype.c:3162 locale/programs/ld-ctype.c:3202
+#: locale/programs/ld-ctype.c:3223 locale/programs/ld-ctype.c:3290
#, c-format
msgid "%s: character `%s' in charmap not representable with one byte"
msgstr "%s : caractère « %s » dans la table des caractères n'est pas représentable par un seul octet"
-#: locale/programs/ld-ctype.c:3431 locale/programs/ld-ctype.c:3456
+#: locale/programs/ld-ctype.c:3334 locale/programs/ld-ctype.c:3359
#, c-format
msgid "%s: character `%s' needed as default value not representable with one byte"
msgstr "%s : caractère « %s » nécessaire comme valeur par défaut n'est pas représentable par un seul octet"
-#: locale/programs/ld-ctype.c:3512
+#: locale/programs/ld-ctype.c:3415
#, c-format
msgid "no output digits defined and none of the standard names in the charmap"
msgstr "Pas de chiffre défini et aucun des noms standards dans la table des caractères"
-#: locale/programs/ld-ctype.c:3803
+#: locale/programs/ld-ctype.c:3662
#, c-format
msgid "%s: transliteration data from locale `%s' not available"
msgstr "%s : le particularisme local « %s » ne dispose pas des données de transposition"
-#: locale/programs/ld-ctype.c:3904
+#: locale/programs/ld-ctype.c:3762
#, c-format
msgid "%s: table for class \"%s\": %lu bytes\n"
msgstr "%s : table pour la classe « %s » : %lu octets\n"
-#: locale/programs/ld-ctype.c:3973
+#: locale/programs/ld-ctype.c:3827
#, c-format
msgid "%s: table for map \"%s\": %lu bytes\n"
msgstr "%s : table de caractères « %s » : %lu octets\n"
-#: locale/programs/ld-ctype.c:4106
+#: locale/programs/ld-ctype.c:3956
#, c-format
msgid "%s: table for width: %lu bytes\n"
msgstr "%s : table de largeur : %lu octets\n"
@@ -2402,7 +2402,7 @@ msgstr "%s : table de largeur : %lu octets\n"
msgid "%s: no identification for category `%s'"
msgstr "%s : pas d'identification pour la catégorie « %s »"
-#: locale/programs/ld-identification.c:435
+#: locale/programs/ld-identification.c:351
#, c-format
msgid "%s: duplicate category version definition"
msgstr "%s : double définition de version de catégorie"
@@ -2443,22 +2443,22 @@ msgstr "%s : valeur du champ « int_curr_symbol » ne correspond pas à un nom
msgid "%s: value for field `%s' must be in range %d...%d"
msgstr "%s : valeurs du champ « %s » doivent être dans la gamme %d..%d"
-#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:274
+#: locale/programs/ld-monetary.c:541 locale/programs/ld-numeric.c:229
#, c-format
msgid "%s: value for field `%s' must be a single character"
msgstr "%s : valeur du champ « %s » doit être un caractère simple"
-#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:318
+#: locale/programs/ld-monetary.c:638 locale/programs/ld-numeric.c:273
#, c-format
msgid "%s: `-1' must be last entry in `%s' field"
msgstr "%s : « -1 » doit être la dernière entrée du champ « %s »"
-#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:335
+#: locale/programs/ld-monetary.c:660 locale/programs/ld-numeric.c:290
#, c-format
msgid "%s: values for field `%s' must be smaller than 127"
msgstr "%s : valeurs du champ « %s » doivent être plus petites que 127"
-#: locale/programs/ld-monetary.c:908
+#: locale/programs/ld-monetary.c:706
msgid "conversion rate value cannot be zero"
msgstr "Le taux de conversion ne peut être zéro"
@@ -2540,16 +2540,16 @@ msgstr "%s : le 3e opérande pour la valeur du champ « %s » ne peut être plu
msgid "%s: values for field `%s' must not be larger than %d"
msgstr "%s : valeurs du champ « %s » ne doivent pas être plus grandes que %d"
-#: locale/programs/ld-time.c:1004
+#: locale/programs/ld-time.c:726
#, c-format
msgid "%s: too few values for field `%s'"
msgstr "%s : trop peu de valeurs pour le champ « %s »"
-#: locale/programs/ld-time.c:1049
+#: locale/programs/ld-time.c:771
msgid "extra trailing semicolon"
msgstr "point virgule de terminaison superflu"
-#: locale/programs/ld-time.c:1052
+#: locale/programs/ld-time.c:774
#, c-format
msgid "%s: too many values for field `%s'"
msgstr "%s : trop de valeurs pour le champ « %s »"
@@ -2662,79 +2662,87 @@ msgstr "Ne peut initialiser LC_ALL à la locale par défaut"
msgid "while preparing output"
msgstr "lors de la préparation de la sortie"
-#: locale/programs/localedef.c:119
+#: locale/programs/localedef.c:121
msgid "Input Files:"
msgstr "Fichiers d'entrée :"
-#: locale/programs/localedef.c:121
+#: locale/programs/localedef.c:123
msgid "Symbolic character names defined in FILE"
msgstr "Les noms symboliques des caractères définis dans le FICHIER"
-#: locale/programs/localedef.c:123
+#: locale/programs/localedef.c:125
msgid "Source definitions are found in FILE"
msgstr "Les définitions des sources ont été repérées dans le FICHIER"
-#: locale/programs/localedef.c:125
+#: locale/programs/localedef.c:127
msgid "FILE contains mapping from symbolic names to UCS4 values"
msgstr "FICHIER contient la table d'adressage des noms symboliques vers les valeurs UCS4"
-#: locale/programs/localedef.c:129
+#: locale/programs/localedef.c:131
msgid "Create output even if warning messages were issued"
msgstr "Créer la sortie même si des messages d'avertissement sont affichées"
-#: locale/programs/localedef.c:130
+#: locale/programs/localedef.c:132
msgid "Create old-style tables"
msgstr "Création des tables selon le vieux format"
-#: locale/programs/localedef.c:131
+#: locale/programs/localedef.c:133
msgid "Optional output file prefix"
msgstr "Préfixe optionnel du fichier de sortie"
-#: locale/programs/localedef.c:132
+#: locale/programs/localedef.c:134
msgid "Strictly conform to POSIX"
msgstr " se conformer de façon stricte à la norme POSIX"
-#: locale/programs/localedef.c:134
+#: locale/programs/localedef.c:136
msgid "Suppress warnings and information messages"
msgstr "Supprimer les messages d'avertissement et d'information"
-#: locale/programs/localedef.c:135
+#: locale/programs/localedef.c:137
msgid "Print more messages"
msgstr "Afficher d'autres messages"
-#: locale/programs/localedef.c:136
+#: locale/programs/localedef.c:138
msgid "Archive control:"
msgstr "Contrôle d'archive :"
-#: locale/programs/localedef.c:138
+#: locale/programs/localedef.c:140
msgid "Don't add new data to archive"
msgstr "Ne pas ajouter de nouvelles données à l'archive"
-#: locale/programs/localedef.c:140
+#: locale/programs/localedef.c:142
msgid "Add locales named by parameters to archive"
msgstr "Ajouter à l'archive des variables de particularisation désignées par paramètres"
-#: locale/programs/localedef.c:141
+#: locale/programs/localedef.c:143
msgid "Replace existing archive content"
msgstr "Remplacement du contenu de l'archive existante"
-#: locale/programs/localedef.c:143
+#: locale/programs/localedef.c:145
msgid "Remove locales named by parameters from archive"
msgstr "Retrait de l'archive des variables de particularisation désignées par paramètres"
-#: locale/programs/localedef.c:144
+#: locale/programs/localedef.c:146
msgid "List content of archive"
msgstr "Liste du contenu de l'archive"
-#: locale/programs/localedef.c:146
+#: locale/programs/localedef.c:148
msgid "locale.alias file to consult when making archive"
msgstr "fichier locale.alias à consulter lors de la création de l'archive"
-#: locale/programs/localedef.c:151
+#: locale/programs/localedef.c:150
+msgid "Generate little-endian output"
+msgstr "Génère en petit endian"
+
+#: locale/programs/localedef.c:152
+msgid "Generate big-endian output"
+msgstr "Génère en grand endian"
+
+#: locale/programs/localedef.c:157
msgid "Compile locale specification"
msgstr "Compiler les particularismes locaux"
-#: locale/programs/localedef.c:154
+#: locale/programs/localedef.c:160
msgid ""
"NAME\n"
"[--add-to-archive|--delete-from-archive] FILE...\n"
@@ -2744,28 +2752,28 @@ msgstr ""
"[--add-to-archive|--delete-from-archive] FICHIER...\n"
"--list-archive [FICHIER]"
-#: locale/programs/localedef.c:229
+#: locale/programs/localedef.c:235
#, c-format
msgid "cannot create directory for output files"
msgstr "ne peut créer le dossier pour les fichiers de sortie"
-#: locale/programs/localedef.c:240
+#: locale/programs/localedef.c:246
#, c-format
msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
msgstr "ERREUR FATALE : le système ne peut définir « _POSIX2_LOCALEDEF »"
-#: locale/programs/localedef.c:254 locale/programs/localedef.c:270
-#: locale/programs/localedef.c:602 locale/programs/localedef.c:622
+#: locale/programs/localedef.c:260 locale/programs/localedef.c:276
+#: locale/programs/localedef.c:614 locale/programs/localedef.c:634
#, c-format
msgid "cannot open locale definition file `%s'"
msgstr "Ne peut ouvrir le fichier des particularisations « %s »"
-#: locale/programs/localedef.c:282
+#: locale/programs/localedef.c:288
#, c-format
msgid "cannot write output files to `%s'"
msgstr "Ne peut écrire dans les fichiers de sortie vers « %s »"
-#: locale/programs/localedef.c:368
+#: locale/programs/localedef.c:380
#, c-format
msgid ""
"System's directory for character maps : %s\n"
@@ -2778,186 +2786,186 @@ msgstr ""
"\t\t du chemin des particularisations : %s\n"
"%s"
-#: locale/programs/localedef.c:570
+#: locale/programs/localedef.c:582
#, c-format
msgid "circular dependencies between locale definitions"
msgstr "Dépendance circulaires entre les définitions de locales"
-#: locale/programs/localedef.c:576
+#: locale/programs/localedef.c:588
#, c-format
msgid "cannot add already read locale `%s' a second time"
msgstr "Ne peut ajouter une locale déjà lu « %s » une seconde fois"
-#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:367
+#: locale/programs/locarchive.c:133 locale/programs/locarchive.c:380
#, c-format
msgid "cannot create temporary file: %s"
msgstr "ne peut créer un fichier temporaire: %s"
-#: locale/programs/locarchive.c:155 locale/programs/locarchive.c:413
+#: locale/programs/locarchive.c:167 locale/programs/locarchive.c:430
#, c-format
msgid "cannot initialize archive file"
msgstr "ne peut initialiser le fichier d'archive"
-#: locale/programs/locarchive.c:162 locale/programs/locarchive.c:420
+#: locale/programs/locarchive.c:174 locale/programs/locarchive.c:437
#, c-format
msgid "cannot resize archive file"
msgstr "ne peut modifier la taille du fichier d'archive"
-#: locale/programs/locarchive.c:177 locale/programs/locarchive.c:435
-#: locale/programs/locarchive.c:645
+#: locale/programs/locarchive.c:189 locale/programs/locarchive.c:452
+#: locale/programs/locarchive.c:674
#, c-format
msgid "cannot map archive header"
msgstr "ne peut mapper l'en-tête de l'archive"
-#: locale/programs/locarchive.c:199
+#: locale/programs/locarchive.c:211
#, c-format
msgid "failed to create new locale archive"
msgstr "échec de création d'une nouvelle archive de particularisation"
-#: locale/programs/locarchive.c:211
+#: locale/programs/locarchive.c:223
#, c-format
msgid "cannot change mode of new locale archive"
msgstr "ne peut changer les protections de la nouvelle archive de particularisation"
-#: locale/programs/locarchive.c:311
+#: locale/programs/locarchive.c:324
#, c-format
msgid "cannot read data from locale archive"
msgstr "ne peut lire les données de l'archive locale"
-#: locale/programs/locarchive.c:342
+#: locale/programs/locarchive.c:355
#, c-format
msgid "cannot map locale archive file"
msgstr "ne peut mapper l'archive de particularisation"
-#: locale/programs/locarchive.c:443
+#: locale/programs/locarchive.c:460
#, c-format
msgid "cannot lock new archive"
msgstr "ne peut verrouiller la nouvelle archive"
-#: locale/programs/locarchive.c:509
+#: locale/programs/locarchive.c:529
#, c-format
msgid "cannot extend locale archive file"
msgstr "ne peut augmenter la taille du fichier de l'archive de particularisation"
-#: locale/programs/locarchive.c:518
+#: locale/programs/locarchive.c:538
#, c-format
msgid "cannot change mode of resized locale archive"
msgstr "ne peut modifier les protections de l'archive des particularisations dont la taille a changé"
-#: locale/programs/locarchive.c:526
+#: locale/programs/locarchive.c:546
#, c-format
msgid "cannot rename new archive"
msgstr "ne peut changer le nom de la nouvelle archive"
-#: locale/programs/locarchive.c:579
+#: locale/programs/locarchive.c:608
#, c-format
msgid "cannot open locale archive \"%s\""
msgstr "ne peut ouvrir l'archive des particularisations « %s »"
-#: locale/programs/locarchive.c:584
+#: locale/programs/locarchive.c:613
#, c-format
msgid "cannot stat locale archive \"%s\""
msgstr "ne peut évaluer par `stat' l'archive des particularisations « %s »"
-#: locale/programs/locarchive.c:603
+#: locale/programs/locarchive.c:632
#, c-format
msgid "cannot lock locale archive \"%s\""
msgstr "ne peut verrouiller l'archive des particularisations « %s »"
-#: locale/programs/locarchive.c:626
+#: locale/programs/locarchive.c:655
#, c-format
msgid "cannot read archive header"
msgstr "ne peut lire l'en-tête de l'archive"
-#: locale/programs/locarchive.c:697
+#: locale/programs/locarchive.c:728
#, c-format
msgid "locale '%s' already exists"
msgstr "particularisation « %s » existe déjà"
-#: locale/programs/locarchive.c:959 locale/programs/locarchive.c:974
-#: locale/programs/locarchive.c:986 locale/programs/locarchive.c:998
-#: locale/programs/locfile.c:343
+#: locale/programs/locarchive.c:1003 locale/programs/locarchive.c:1018
+#: locale/programs/locarchive.c:1030 locale/programs/locarchive.c:1042
+#: locale/programs/locfile.c:350
#, c-format
msgid "cannot add to locale archive"
msgstr "ne peut l'ajouter à l'archive des particularisations"
-#: locale/programs/locarchive.c:1156
+#: locale/programs/locarchive.c:1206
#, c-format
msgid "locale alias file `%s' not found"
msgstr "alias du fichier des particularisations « %s » non trouvé"
-#: locale/programs/locarchive.c:1306
+#: locale/programs/locarchive.c:1357
#, c-format
msgid "Adding %s\n"
msgstr "Ajout de %s\n"
-#: locale/programs/locarchive.c:1312
+#: locale/programs/locarchive.c:1363
#, c-format
msgid "stat of \"%s\" failed: %s: ignored"
msgstr "échec d'évaluation par stat() de « %s » : %s : ignoré"
-#: locale/programs/locarchive.c:1318
+#: locale/programs/locarchive.c:1369
#, c-format
msgid "\"%s\" is no directory; ignored"
msgstr "« %s » n'est pas un dossier ; ignoré"
-#: locale/programs/locarchive.c:1325
+#: locale/programs/locarchive.c:1376
#, c-format
msgid "cannot open directory \"%s\": %s: ignored"
msgstr "ne peut ouvrir le dossier « %s » : %s : ignoré"
-#: locale/programs/locarchive.c:1397
+#: locale/programs/locarchive.c:1448
#, c-format
msgid "incomplete set of locale files in \"%s\""
msgstr "jeu incomplet de fichiers de particularisation dans « %s »"
-#: locale/programs/locarchive.c:1461
+#: locale/programs/locarchive.c:1512
#, c-format
msgid "cannot read all files in \"%s\": ignored"
msgstr "ne peut lire tous les fichiers dans « %s » : ignoré"
-#: locale/programs/locarchive.c:1531
+#: locale/programs/locarchive.c:1584
#, c-format
msgid "locale \"%s\" not in archive"
msgstr "particularisation « %s » n'est pas dans l'archive"
-#: locale/programs/locfile.c:131
+#: locale/programs/locfile.c:137
#, c-format
msgid "argument to `%s' must be a single character"
msgstr "L'argument de « %s » doit être un caractère simple"
-#: locale/programs/locfile.c:251
+#: locale/programs/locfile.c:257
msgid "syntax error: not inside a locale definition section"
msgstr "Erreur de syntaxe : pas à l'intérieur d'une section de définition localisée"
-#: locale/programs/locfile.c:625
+#: locale/programs/locfile.c:800
#, c-format
msgid "cannot open output file `%s' for category `%s'"
msgstr "Ne peut ouvrir le fichier de sortie « %s » de catégorie « %s »"
-#: locale/programs/locfile.c:649
+#: locale/programs/locfile.c:824
#, c-format
msgid "failure while writing data for category `%s'"
msgstr "Échec lors de l'écriture des données de catégorie « %s »"
-#: locale/programs/locfile.c:745
+#: locale/programs/locfile.c:920
#, c-format
msgid "cannot create output file `%s' for category `%s'"
msgstr "Ne peut créer le fichier de sortie « %s » de catégorie « %s »"
-#: locale/programs/locfile.c:781
+#: locale/programs/locfile.c:956
msgid "expecting string argument for `copy'"
msgstr "l'argument de chaîne attendu pour `copy'"
-#: locale/programs/locfile.c:785
+#: locale/programs/locfile.c:960
msgid "locale name should consist only of portable characters"
msgstr "Nom de locale doit être composé de caractères portables"
-#: locale/programs/locfile.c:804
+#: locale/programs/locfile.c:979
msgid "no other keyword shall be specified when `copy' is used"
msgstr "Aucun autre mot clé ne doit être spécifié lorsque « copy » est utilisé"
-#: locale/programs/locfile.c:818
+#: locale/programs/locfile.c:993
#, c-format
msgid "`%1$s' definition does not end with `END %1$s'"
msgstr "« %1$s » la définition ne se termine pas par « END %1$s »"
@@ -3008,23 +3016,23 @@ msgstr "trop d'arguments"
msgid "needs to be installed setuid `root'"
msgstr "nécessite d'être installé avec setuid `root'"
-#: malloc/mcheck.c:347
+#: malloc/mcheck.c:346
msgid "memory is consistent, library is buggy\n"
msgstr "La mémoire est consistente, la librairie est fautive.\n"
-#: malloc/mcheck.c:350
+#: malloc/mcheck.c:349
msgid "memory clobbered before allocated block\n"
msgstr "Mémoire écrasée avant le bloc alloué\n"
-#: malloc/mcheck.c:353
+#: malloc/mcheck.c:352
msgid "memory clobbered past end of allocated block\n"
msgstr "Mémoire écrasée après la fin du bloc alloué\n"
-#: malloc/mcheck.c:356
+#: malloc/mcheck.c:355
msgid "block freed twice\n"
msgstr "Bloc libéré deux fois\n"
-#: malloc/mcheck.c:359
+#: malloc/mcheck.c:358
msgid "bogus mcheck_status, library is buggy\n"
msgstr "Statut de « mcheck_status » erroné, la librarie est erronée.\n"
@@ -3791,12 +3799,12 @@ msgstr "yp_update : ne peut convertir le nom de l'hôte à un nom réseau (netn
msgid "yp_update: cannot get server address\n"
msgstr "yp_update : ne peut obtenir l'adresse du serveur\n"
-#: nscd/aicache.c:82 nscd/hstcache.c:494
+#: nscd/aicache.c:83 nscd/hstcache.c:494
#, c-format
msgid "Haven't found \"%s\" in hosts cache!"
msgstr "N'a pas trouvé « %s » dans la cache de la liste des hôtes !"
-#: nscd/aicache.c:84 nscd/hstcache.c:496
+#: nscd/aicache.c:85 nscd/hstcache.c:496
#, c-format
msgid "Reloading \"%s\" in hosts cache!"
msgstr "Recharge « %s » dans le cache hôte !"
@@ -4044,7 +4052,7 @@ msgstr "échec de getgrouplist"
msgid "setgroups failed"
msgstr "échec de setgroups"
-#: nscd/grpcache.c:413 nscd/hstcache.c:441 nscd/initgrcache.c:419
+#: nscd/grpcache.c:413 nscd/hstcache.c:441 nscd/initgrcache.c:418
#: nscd/pwdcache.c:391 nscd/servicescache.c:346
#, c-format
msgid "short write in %s: %s"
@@ -4075,22 +4083,22 @@ msgstr "libéré %zu octets dans le cache %s"
msgid "no more memory for database '%s'"
msgstr "plus de mémoire disponible pour la base de données '%s'"
-#: nscd/netgroupcache.c:77
+#: nscd/netgroupcache.c:126
#, c-format
msgid "Haven't found \"%s\" in netgroup cache!"
msgstr "N'a pas trouvé « %s » dans le cache du netgroupe !"
-#: nscd/netgroupcache.c:79
+#: nscd/netgroupcache.c:128
#, c-format
msgid "Reloading \"%s\" in netgroup cache!"
msgstr "Recharge « %s » dans le cache netgroupe !"
-#: nscd/netgroupcache.c:475
+#: nscd/netgroupcache.c:509
#, c-format
msgid "Haven't found \"%s (%s,%s,%s)\" in netgroup cache!"
msgstr "N'a pas trouvé « %s (%s,%s,%s) » dans le cache du groupe !"
-#: nscd/netgroupcache.c:478
+#: nscd/netgroupcache.c:512
#, c-format
msgid "Reloading \"%s (%s,%s,%s)\" in netgroup cache!"
msgstr "Recharge « %s (%s,%s,%s) » dans le cache netgroupe !"
@@ -4143,7 +4151,7 @@ msgstr "Utiliser une cache séparée pour chaque usager"
msgid "Name Service Cache Daemon."
msgstr "« Daemon » du cache du service de noms."
-#: nscd/nscd.c:164 nss/getent.c:999 nss/makedb.c:206
+#: nscd/nscd.c:164 nss/getent.c:1003 nss/makedb.c:206
#, c-format
msgid "wrong number of arguments"
msgstr "Mauvais nombre d'arguments"
@@ -4202,6 +4210,21 @@ msgstr "l'invalidation a échoué"
msgid "secure services not implemented anymore"
msgstr "les services de sécurité ne sont plus implémentés"
+#: nscd/nscd.c:462
+#, c-format
+msgid ""
+"Supported tables:\n"
+"%s\n"
+"\n"
+"For bug reporting instructions, please see:\n"
+"%s.\n"
+msgstr ""
+"Tables supportées:\n"
+"%s\n"
+"\n"
+"Pour les instructions de rapport de bug, SVP voyez là : \n"
+"%s.\n"
+
#: nscd/nscd_conf.c:57
#, c-format
msgid "database %s is not supported"
@@ -4522,16 +4545,16 @@ msgstr "Obtient des entrées de la base de données administrative"
msgid "Enumeration not supported on %s\n"
msgstr "Énumération non supportée sur %s\n"
-#: nss/getent.c:913
+#: nss/getent.c:917
#, c-format
msgid "Unknown database name"
msgstr "Base de données inconnue"
-#: nss/getent.c:943
+#: nss/getent.c:947
msgid "Supported databases:\n"
msgstr "Base de données supportées :\n"
-#: nss/getent.c:1009
+#: nss/getent.c:1013
#, c-format
msgid "Unknown database: %s\n"
msgstr "Base de données inconnue : « %s »\n"
@@ -4974,8 +4997,8 @@ msgid "Child has terminated abnormally and did not create a core file"
msgstr "Enfant ayant terminé anormalement et n'ayant pas créé un fichier coeur"
#: stdio-common/psiginfo-data.h:37
-msgid "Child hat terminated abnormally and created a core file"
-msgstr "Enfant ayant terminé anormalement et ayant créé un fichier coeur"
+msgid "Child has terminated abnormally and created a core file"
+msgstr "Processus fils ayant terminé anormalement et ayant créé un fichier coeur"
#: stdio-common/psiginfo-data.h:38
msgid "Traced child has trapped"
@@ -5480,8 +5503,23 @@ msgstr "-T\t\tgénère le code qui supporte les tables de distribution RPC\n"
msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n"
msgstr "-Y path\t\tnom de répertoire pour trouver un préprocesseur C (cpp)\n"
+#: sunrpc/rpc_main.c:1445
+#, c-format
+msgid "-5\t\tSysVr4 compatibility mode\n"
+msgstr "-5\t\tmode de compatibilité SysVr4\n"
+
#: sunrpc/rpc_main.c:1446
#, c-format
+msgid "--help\t\tgive this help list\n"
+msgstr "--help\t\tdonne cette liste d'aide\n"
+
+#: sunrpc/rpc_main.c:1447
+#, c-format
+msgid "--version\tprint program version\n"
+msgstr "--version\tAffiche la version du programme\n"
+
+#: sunrpc/rpc_main.c:1449
+#, c-format
msgid ""
"\n"
"For bug reporting instructions, please see:\n"
@@ -6755,72 +6793,73 @@ msgstr "Ne peut ouvrir « %s »"
msgid "cannot read header from `%s'"
msgstr "Ne peut lire l'en-tête de « %s »"
-#: timezone/zdump.c:246
+#: timezone/zdump.c:280
msgid "lacks alphabetic at start"
msgstr "Il manque un lettre de l'alphabet au début"
-#: timezone/zdump.c:248
+#: timezone/zdump.c:282
msgid "has fewer than 3 alphabetics"
msgstr "a moins de 3 lettres alphabétiques"
-#: timezone/zdump.c:250
+#: timezone/zdump.c:284
msgid "has more than 6 alphabetics"
msgstr "a plus de 6 lettres alphabétiques"
-#: timezone/zdump.c:258
+#: timezone/zdump.c:292
msgid "differs from POSIX standard"
msgstr "diffère du standard POSIX"
-#: timezone/zdump.c:264
+#: timezone/zdump.c:298
#, c-format
msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"
msgstr "%s : attention : zone \"%s\" abréviation \"%s\" %s\n"
-#: timezone/zdump.c:273
+#: timezone/zdump.c:307
#, c-format
msgid ""
-"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
+"%s: usage: %s [--version] [--help] [-{vV}] [-{ct} [lo,]hi] zonename ...\n"
"\n"
"Report bugs to %s.\n"
msgstr ""
-"%s : usage est %s [ --version ] [ --help ] [ -v ] [ -c [AnnéeBasse,]AnnéeHaute ] nom_fuseau_horaire ...\n"
+"%s : usage %s [--version] [--help] [-{vV}] [-{ct} [lo,]hi] nom_fuseau_horaire ...\n"
"\n"
"Rapporter les bugs à %s.\n"
-#: timezone/zdump.c:340
+#: timezone/zdump.c:384
#, c-format
msgid "%s: wild -c argument %s\n"
msgstr "%s : argument -c intempestif %s\n"
-#: timezone/zdump.c:426
+#: timezone/zdump.c:417
+#, c-format
+msgid "%s: wild -t argument %s\n"
+msgstr "%s : argument -t intempestif %s\n"
+
+#: timezone/zdump.c:506
msgid "Error writing to standard output"
msgstr "Erreur d'écriture sur la sortie standard"
-#: timezone/zdump.c:439
-#, c-format
-msgid "%s: use of -v on system with floating time_t other than float or double\n"
-msgstr "%s : usage de -v sur un système avec time_t flottant autre que float ou double\n"
-
-#: timezone/zic.c:361
+#: timezone/zic.c:370
#, c-format
msgid "%s: Memory exhausted: %s\n"
msgstr "%s : mémoire épuisée : %s\n"
-#: timezone/zic.c:401
+#: timezone/zic.c:410
#, c-format
-msgid "\"%s\", line %d: %s"
-msgstr "« %s », ligne %d : %s"
+msgid "\"%s\", line %d: "
+msgstr "\"%s\", ligne %d: "
-#: timezone/zic.c:404
+#: timezone/zic.c:413
#, c-format
msgid " (rule from \"%s\", line %d)"
msgstr " (règles de « %s », ligne %d)"
-#: timezone/zic.c:415
+#: timezone/zic.c:432
+#, c-format
msgid "warning: "
msgstr "AVERTISSEMENT : "
-#: timezone/zic.c:425
+#: timezone/zic.c:442
#, c-format
msgid ""
"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
@@ -6833,345 +6872,358 @@ msgstr ""
"\n"
"Rapporter les bugs à %s.\n"
-#: timezone/zic.c:460
+#: timezone/zic.c:477
msgid "wild compilation-time specification of zic_t"
msgstr "spécification approximative de zic_t au moment de la compilation"
-#: timezone/zic.c:479
+#: timezone/zic.c:496
#, c-format
msgid "%s: More than one -d option specified\n"
msgstr "%s : option -d spécifiée plus d'une fois\n"
-#: timezone/zic.c:489
+#: timezone/zic.c:506
#, c-format
msgid "%s: More than one -l option specified\n"
msgstr "%s : option -l spécifiée plus d'une fois\n"
-#: timezone/zic.c:499
+#: timezone/zic.c:516
#, c-format
msgid "%s: More than one -p option specified\n"
msgstr "%s : option -p spécifiée plus d'une fois\n"
-#: timezone/zic.c:509
+#: timezone/zic.c:526
#, c-format
msgid "%s: More than one -y option specified\n"
msgstr "%s : option -y spécifiée plus d'une fois\n"
-#: timezone/zic.c:519
+#: timezone/zic.c:536
#, c-format
msgid "%s: More than one -L option specified\n"
msgstr "%s : option -L spécifiée plus d'une fois\n"
-#: timezone/zic.c:566
+#: timezone/zic.c:583
msgid "link to link"
msgstr "lien à lien"
-#: timezone/zic.c:629
+#: timezone/zic.c:650
msgid "hard link failed, symbolic link used"
msgstr "Échec de création du lien direct, création d'un lien symbolique"
-#: timezone/zic.c:637
+#: timezone/zic.c:660
+#, c-format
+msgid "%s: Can't read %s: %s\n"
+msgstr "%s : Ne peut lire %s: %s\n"
+
+#: timezone/zic.c:668 timezone/zic.c:1533
#, c-format
-msgid "%s: Can't link from %s to %s: %s\n"
-msgstr "%s : ne peut établir un lien entre %s et %s : %s\n"
+msgid "%s: Can't create %s: %s\n"
+msgstr "%s : ne peut créer %s : %s\n"
-#: timezone/zic.c:697 timezone/zic.c:699
+#: timezone/zic.c:676 timezone/zic.c:881
+#, c-format
+msgid "%s: Error reading %s\n"
+msgstr "%s : erreur de lecture de %s\n"
+
+#: timezone/zic.c:682 timezone/zic.c:1750
+#, c-format
+msgid "%s: Error writing %s\n"
+msgstr "%s : erreur d'écriture de %s\n"
+
+#: timezone/zic.c:686
+msgid "link failed, copy used"
+msgstr "Échec de création du lien, la copie est utilisée"
+
+#: timezone/zic.c:744 timezone/zic.c:746
msgid "same rule name in multiple files"
msgstr "Même nom de règle dans plusieurs fichiers"
-#: timezone/zic.c:740
+#: timezone/zic.c:787
msgid "unruly zone"
msgstr "Zone sans règle"
-#: timezone/zic.c:747
+#: timezone/zic.c:794
#, c-format
msgid "%s in ruleless zone"
msgstr "%s est dans une zone sans règle"
-#: timezone/zic.c:767
+#: timezone/zic.c:814
msgid "standard input"
msgstr "entrée standard"
-#: timezone/zic.c:772
+#: timezone/zic.c:819
#, c-format
msgid "%s: Can't open %s: %s\n"
msgstr "%s : ne peut ouvrir %s : %s\n"
-#: timezone/zic.c:783
+#: timezone/zic.c:830
msgid "line too long"
msgstr "Ligne trop longue"
-#: timezone/zic.c:803
+#: timezone/zic.c:850
msgid "input line of unknown type"
msgstr "Ligne d'entrée de type inconnu"
-#: timezone/zic.c:819
+#: timezone/zic.c:866
#, c-format
msgid "%s: Leap line in non leap seconds file %s\n"
msgstr ""
"%s : ligne de type « Leap » dans un fichier qui n'a pas\n"
"de délai en secondes %s\n"
-#: timezone/zic.c:826 timezone/zic.c:1243 timezone/zic.c:1265
+#: timezone/zic.c:873 timezone/zic.c:1282 timezone/zic.c:1304
#, c-format
msgid "%s: panic: Invalid l_value %d\n"
msgstr "%s : panique : valeur %d de type « l_value » invalide\n"
-#: timezone/zic.c:834
-#, c-format
-msgid "%s: Error reading %s\n"
-msgstr "%s : erreur de lecture de %s\n"
-
-#: timezone/zic.c:841
+#: timezone/zic.c:888
#, c-format
msgid "%s: Error closing %s: %s\n"
msgstr "%s : erreur lors de la fermeture de %s : %s\n"
-#: timezone/zic.c:846
+#: timezone/zic.c:893
msgid "expected continuation line not found"
msgstr "ligne de continuation attendue, non repérée"
-#: timezone/zic.c:887 timezone/zic.c:2413 timezone/zic.c:2427
+#: timezone/zic.c:934 timezone/zic.c:2610 timezone/zic.c:2624
msgid "time overflow"
msgstr "Débordement du temps alloué"
-#: timezone/zic.c:891
+#: timezone/zic.c:938
msgid "24:00 not handled by pre-1998 versions of zic"
msgstr "24 : 00 non pris en charge par les versions de zic antérieures à1998 "
-#: timezone/zic.c:894
+#: timezone/zic.c:941
msgid "values over 24 hours not handled by pre-2007 versions of zic"
msgstr "valeurs au-delà de 24 heures non prises en charge par les versions de zic antérieures à 2007"
-#: timezone/zic.c:905
+#: timezone/zic.c:952
msgid "wrong number of fields on Rule line"
msgstr "Mauvais nombre de champs sur la ligne de type « Rule »"
-#: timezone/zic.c:909
+#: timezone/zic.c:956
msgid "nameless rule"
msgstr "Règle sans nom"
-#: timezone/zic.c:914
+#: timezone/zic.c:961
msgid "invalid saved time"
msgstr "Temps sauvegardé invalide"
-#: timezone/zic.c:932
+#: timezone/zic.c:978
msgid "wrong number of fields on Zone line"
msgstr "Mauvais nombre de champs sur la ligne de type « Zone »"
-#: timezone/zic.c:938
+#: timezone/zic.c:983
#, c-format
msgid "\"Zone %s\" line and -l option are mutually exclusive"
msgstr "La ligne \"Zone %s\" et l'option -l sont mutuellement exclusifs"
-#: timezone/zic.c:946
+#: timezone/zic.c:989
#, c-format
msgid "\"Zone %s\" line and -p option are mutually exclusive"
msgstr "La ligne « Zone %s » et l'option -p sont mutuellement exclusifs"
-#: timezone/zic.c:958
+#: timezone/zic.c:997
#, c-format
msgid "duplicate zone name %s (file \"%s\", line %d)"
msgstr "Double noms de zone %s (fichier « %s », ligne %d)"
-#: timezone/zic.c:972
+#: timezone/zic.c:1010
msgid "wrong number of fields on Zone continuation line"
msgstr "Mauvais nombre de champs sur la ligne de type continuation de « Zone »"
-#: timezone/zic.c:1009
-msgid "invalid UTC offset"
-msgstr "Adressage relatif GMT invalide"
+#: timezone/zic.c:1047
+msgid "invalid UT offset"
+msgstr "décalage de l'UTC invalide"
-#: timezone/zic.c:1012
+#: timezone/zic.c:1050
msgid "invalid abbreviation format"
msgstr "Format d'abréviation invalide"
-#: timezone/zic.c:1041
+#: timezone/zic.c:1079
msgid "Zone continuation line end time is not after end time of previous line"
msgstr ""
"Temps final de la ligne de continuation du fuseau horaire est antérieur\n"
"au temps final de la ligne précédente"
-#: timezone/zic.c:1066
+#: timezone/zic.c:1105
msgid "wrong number of fields on Leap line"
msgstr "Mauvais nombre de champs sur la ligne de type « Leap »"
-#: timezone/zic.c:1075
+#: timezone/zic.c:1114
msgid "invalid leaping year"
msgstr "Année bissextile invalide"
-#: timezone/zic.c:1095 timezone/zic.c:1197
+#: timezone/zic.c:1134 timezone/zic.c:1236
msgid "invalid month name"
msgstr "Nom de mois invalide"
-#: timezone/zic.c:1108 timezone/zic.c:1310 timezone/zic.c:1324
+#: timezone/zic.c:1147 timezone/zic.c:1349 timezone/zic.c:1363
msgid "invalid day of month"
msgstr "Jour du mois invalide"
# time/zic.c:1120A
-#: timezone/zic.c:1113
+#: timezone/zic.c:1152
msgid "time before zero"
msgstr "Temps défini avant le zéro"
-#: timezone/zic.c:1117
+#: timezone/zic.c:1156
msgid "time too small"
msgstr "valeur de temps trop petite"
-#: timezone/zic.c:1121
+#: timezone/zic.c:1160
msgid "time too large"
msgstr "valeur de temps trop grande"
-#: timezone/zic.c:1125 timezone/zic.c:1226
+#: timezone/zic.c:1164 timezone/zic.c:1265
msgid "invalid time of day"
msgstr "Heure du jour invalide"
-#: timezone/zic.c:1144
+#: timezone/zic.c:1183
msgid "illegal CORRECTION field on Leap line"
msgstr "champ CORRECTION non permis dans la ligne de type « Leap »"
-#: timezone/zic.c:1149
+#: timezone/zic.c:1188
msgid "illegal Rolling/Stationary field on Leap line"
msgstr "Champ « Rolling/Stationary » non permis sur la ligne de type « Leap »"
-#: timezone/zic.c:1163
+#: timezone/zic.c:1202
msgid "wrong number of fields on Link line"
msgstr "Mauvais nombre de champs sur la ligne de type « Link »"
-#: timezone/zic.c:1167
+#: timezone/zic.c:1206
msgid "blank FROM field on Link line"
msgstr "Champ « FROM » vide dans la ligne de type « Link »"
-#: timezone/zic.c:1171
+#: timezone/zic.c:1210
msgid "blank TO field on Link line"
msgstr "Champ « TO » vide dans la ligne de type « Link »"
-#: timezone/zic.c:1247
+#: timezone/zic.c:1286
msgid "invalid starting year"
msgstr "Année initiale invalide"
-#: timezone/zic.c:1269
+#: timezone/zic.c:1308
msgid "invalid ending year"
msgstr "Année finale invalide"
-#: timezone/zic.c:1273
+#: timezone/zic.c:1312
msgid "starting year greater than ending year"
msgstr "année initiale plus grande que l'année finale"
-#: timezone/zic.c:1280
+#: timezone/zic.c:1319
msgid "typed single year"
msgstr "une seule année fournie"
-#: timezone/zic.c:1315
+#: timezone/zic.c:1354
msgid "invalid weekday name"
msgstr "Nom du jour de semaine invalide"
-#: timezone/zic.c:1481
+#: timezone/zic.c:1523
#, c-format
msgid "%s: Can't remove %s: %s\n"
msgstr "%s : ne peut enlever %s : %s\n"
-#: timezone/zic.c:1491
-#, c-format
-msgid "%s: Can't create %s: %s\n"
-msgstr "%s : ne peut créer %s : %s\n"
-
-#: timezone/zic.c:1683
-#, c-format
-msgid "%s: Error writing %s\n"
-msgstr "%s : erreur d'écriture de %s\n"
-
-#: timezone/zic.c:1966
+#: timezone/zic.c:2105
msgid "no POSIX environment variable for zone"
msgstr "pas de variable d'environnement POSIX pour zone"
-#: timezone/zic.c:2133
+#: timezone/zic.c:2111
+#, c-format
+msgid "%s: pre-%d clients may mishandle distant timestamps"
+msgstr "%s: pre-%d clients peuvent mal gérer les timestamps distant"
+
+#: timezone/zic.c:2292
msgid "can't determine time zone abbreviation to use just after until time"
msgstr ""
"Ne peut déterminer l'abréviation du fuseau horaire à utiliser\n"
"juste après telle date"
-#: timezone/zic.c:2177
+#: timezone/zic.c:2338 timezone/zic.c:2416
+msgid "too many local time types"
+msgstr "trop de types localisés pour la représentation du temps"
+
+#: timezone/zic.c:2374
msgid "too many transitions?!"
msgstr "trop de transitions définies ? !"
-#: timezone/zic.c:2192
+#: timezone/zic.c:2389
msgid "internal error - addtype called with bad isdst"
msgstr "Erreur interne - addtype() appellé avec un mauvais bloc de type « isdst »"
-#: timezone/zic.c:2196
+#: timezone/zic.c:2393
msgid "internal error - addtype called with bad ttisstd"
msgstr "Erreur interne - addtype() appellé avec un mauvais bloc de type « ttisstd »"
-#: timezone/zic.c:2200
+#: timezone/zic.c:2397
msgid "internal error - addtype called with bad ttisgmt"
msgstr "Erreur interne - addtype() appellé avec un mauvais bloc de type « ttisgmt »"
-#: timezone/zic.c:2219
-msgid "too many local time types"
-msgstr "trop de types localisés pour la représentation du temps"
-
-#: timezone/zic.c:2223
-msgid "UTC offset out of range"
-msgstr "UTC décalage en dehors de la plage"
+#: timezone/zic.c:2420
+msgid "UT offset out of range"
+msgstr "décalage de l'UTC en dehors de la plage"
-#: timezone/zic.c:2247
+#: timezone/zic.c:2444
msgid "too many leap seconds"
msgstr "trop de délai en secondes"
-#: timezone/zic.c:2253
+#: timezone/zic.c:2450
msgid "repeated leap second moment"
msgstr "Répétition du délai une seconde fois"
-#: timezone/zic.c:2303
+#: timezone/zic.c:2500
msgid "Wild result from command execution"
msgstr "Résultat anarchique résultant de l'exécution de la commande"
-#: timezone/zic.c:2304
+#: timezone/zic.c:2501
#, c-format
msgid "%s: command was '%s', result was %d\n"
msgstr "%s : la commande était « %s », le résultat était %d\n"
-#: timezone/zic.c:2395
+#: timezone/zic.c:2592
msgid "Odd number of quotation marks"
msgstr "Nombre impair de caractères apostrophe"
-#: timezone/zic.c:2472
+#: timezone/zic.c:2669
msgid "use of 2/29 in non leap-year"
msgstr "Utiliser 2/29 pour les années non-bissextiles"
-#: timezone/zic.c:2507
+#: timezone/zic.c:2704
msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic"
msgstr "la règle en dehors de début/fin du mois--ne fonctionnera pas avec les versions de zic antérieures à 2004"
-#: timezone/zic.c:2538
+#: timezone/zic.c:2735
msgid "time zone abbreviation lacks alphabetic at start"
msgstr "l'abréviation du nom de fuseau horaire n'a pas de caractère alphabétique au début"
-#: timezone/zic.c:2540
+#: timezone/zic.c:2737
msgid "time zone abbreviation has fewer than 3 alphabetics"
msgstr "l'abréviation du nom de fuseau horaire a moins de 3 caractères alphabétiques"
-#: timezone/zic.c:2542
+#: timezone/zic.c:2739
msgid "time zone abbreviation has too many alphabetics"
msgstr "l'abréviation du nom de fuseau horaire a trop de caractères alphabétiques"
-#: timezone/zic.c:2552
+#: timezone/zic.c:2749
msgid "time zone abbreviation differs from POSIX standard"
msgstr "l'abréviation du nom de fuseau horaire diffère du standard POSIX"
-#: timezone/zic.c:2564
+#: timezone/zic.c:2755
msgid "too many, or too long, time zone abbreviations"
msgstr "trop ou de trop longues abréviations de fuseaux horaires"
-#: timezone/zic.c:2604
+#: timezone/zic.c:2795
#, c-format
msgid "%s: Can't create directory %s: %s\n"
msgstr "%s : ne peut créer le dossier %s : %s\n"
-#: timezone/zic.c:2625
-#, c-format
-msgid "%s: %d did not sign extend correctly\n"
-msgstr "%s : %d n'a pas fait correctement l'expansion de la valeur signée\n"
+#~ msgid "%s: use of -v on system with floating time_t other than float or double\n"
+#~ msgstr "%s : usage de -v sur un système avec time_t flottant autre que float ou double\n"
+
+#~ msgid "%s: Can't link from %s to %s: %s\n"
+#~ msgstr "%s : ne peut établir un lien entre %s et %s : %s\n"
+
+#~ msgid "%s: %d did not sign extend correctly\n"
+#~ msgstr "%s : %d n'a pas fait correctement l'expansion de la valeur signée\n"
#~ msgid "cannot find any C preprocessor (cpp)\n"
#~ msgstr "Ne peut trouver un préprocesseur C (cpp)\n"
diff --git a/libc/po/sl.po b/libc/po/sl.po
index afa9303a1..f14abb192 100644
--- a/libc/po/sl.po
+++ b/libc/po/sl.po
@@ -1,14 +1,14 @@
# -*- mode: po; coding: utf-8; -*- Slovenian message catalog for GNU libc.
-# Copyright (C) 2013 Free Software Foundation, Inc.
+# Copyright (C) 2013, 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the glibc package.
-# Primož Peterlin <primozz.peterlin@gmail.com>, 2013.
-# $Id: libc-2.17.90.20130724.sl.po,v 1.5 2013/12/27 21:32:53 peterlin Exp $
+# Primož Peterlin <primozz.peterlin@gmail.com>, 2013, 2014.
+# $Id: libc-2.18.90.20140105.sl.po,v 1.1 2014/02/02 15:58:03 peterlin Exp $
msgid ""
msgstr ""
-"Project-Id-Version: libc 2.17.90.20130724\n"
+"Project-Id-Version: libc 2.18.90.20140105\n"
"Report-Msgid-Bugs-To: bug-coreutils@gnu.org\n"
-"POT-Creation-Date: 2013-07-24 23:29-0700\n"
-"PO-Revision-Date: 2013-12-27 22:32+0100\n"
+"POT-Creation-Date: 2014-01-05 17:40+1000\n"
+"PO-Revision-Date: 2014-02-02 16:58+0100\n"
"Last-Translator: Primož Peterlin <primozz.peterlin@gmail.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
"Language: sl\n"
@@ -144,8 +144,8 @@ msgstr ""
#: catgets/gencat.c:229 debug/pcprofiledump.c:209 elf/ldconfig.c:307
#: elf/pldd.c:219 elf/sln.c:85 elf/sprof.c:372 iconv/iconv_prog.c:408
#: iconv/iconvconfig.c:379 locale/programs/locale.c:277
-#: locale/programs/localedef.c:364 login/programs/pt_chown.c:88
-#: malloc/memusagestat.c:563 nscd/nscd.c:450 nss/getent.c:965 nss/makedb.c:369
+#: locale/programs/localedef.c:376 login/programs/pt_chown.c:88
+#: malloc/memusagestat.c:563 nss/getent.c:969 nss/makedb.c:369
#: posix/getconf.c:1121 sunrpc/rpcinfo.c:691
#: sysdeps/unix/sysv/linux/lddlibc4.c:61
#, c-format
@@ -159,9 +159,9 @@ msgstr ""
#: catgets/gencat.c:245 debug/pcprofiledump.c:225 debug/xtrace.sh:64
#: elf/ldconfig.c:323 elf/ldd.bash.in:38 elf/pldd.c:235 elf/sotruss.ksh:75
#: elf/sprof.c:389 iconv/iconv_prog.c:425 iconv/iconvconfig.c:396
-#: locale/programs/locale.c:294 locale/programs/localedef.c:390
+#: locale/programs/locale.c:294 locale/programs/localedef.c:402
#: login/programs/pt_chown.c:62 malloc/memusage.sh:71
-#: malloc/memusagestat.c:579 nscd/nscd.c:466 nss/getent.c:86 nss/makedb.c:385
+#: malloc/memusagestat.c:581 nscd/nscd.c:485 nss/getent.c:86 nss/makedb.c:385
#: posix/getconf.c:1103 sysdeps/unix/sysv/linux/lddlibc4.c:68
#, c-format
msgid ""
@@ -177,8 +177,8 @@ msgstr ""
#: catgets/gencat.c:250 debug/pcprofiledump.c:230 debug/xtrace.sh:68
#: elf/ldconfig.c:328 elf/pldd.c:240 elf/sprof.c:395 iconv/iconv_prog.c:430
#: iconv/iconvconfig.c:401 locale/programs/locale.c:299
-#: locale/programs/localedef.c:395 malloc/memusage.sh:75
-#: malloc/memusagestat.c:584 nscd/nscd.c:471 nss/getent.c:91 nss/makedb.c:390
+#: locale/programs/localedef.c:407 malloc/memusage.sh:75
+#: malloc/memusagestat.c:586 nscd/nscd.c:490 nss/getent.c:91 nss/makedb.c:390
#: posix/getconf.c:1108
#, c-format
msgid "Written by %s.\n"
@@ -379,60 +379,60 @@ msgstr "napaÄen parameter zaÅ¡Äita"
msgid "unknown"
msgstr "neznano"
-#: elf/cache.c:126
+#: elf/cache.c:135
msgid "Unknown OS"
msgstr "Neznan OS"
-#: elf/cache.c:131
+#: elf/cache.c:140
#, c-format
msgid ", OS ABI: %s %d.%d.%d"
msgstr ", OS ABI: %s %d.%d.%d"
-#: elf/cache.c:148 elf/ldconfig.c:1318
+#: elf/cache.c:157 elf/ldconfig.c:1318
#, c-format
msgid "Can't open cache file %s\n"
msgstr "Ni mogoÄe odpreti predpomnilniÅ¡ke datoteke %s\n"
-#: elf/cache.c:162
+#: elf/cache.c:171
#, c-format
msgid "mmap of cache file failed.\n"
msgstr "mmap predpomnilniške datoteke ni uspel.\n"
-#: elf/cache.c:166 elf/cache.c:180
+#: elf/cache.c:175 elf/cache.c:189
#, c-format
msgid "File is not a cache file.\n"
msgstr "Datoteka ni predpomnilniška datoteka.\n"
-#: elf/cache.c:213 elf/cache.c:223
+#: elf/cache.c:222 elf/cache.c:232
#, c-format
msgid "%d libs found in cache `%s'\n"
msgstr "%d knjižnic najdeno v predpomnilniku »%s«\n"
-#: elf/cache.c:417
+#: elf/cache.c:426
#, c-format
msgid "Can't create temporary cache file %s"
msgstr "ZaÄasne predpomnilniÅ¡ke datoteke %s ni mogoÄe ustvariti"
-#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:444
+#: elf/cache.c:434 elf/cache.c:444 elf/cache.c:448 elf/cache.c:453
#, c-format
msgid "Writing of cache data failed"
msgstr "Zapisovanje predpomnilniških podatkov ni uspelo"
-#: elf/cache.c:449
+#: elf/cache.c:458
#, c-format
msgid "Changing access rights of %s to %#o failed"
msgstr "Sprememba pravic dostopa za %s na %#o ni uspela"
-#: elf/cache.c:454
+#: elf/cache.c:463
#, c-format
msgid "Renaming of %s to %s failed"
msgstr "Preimenovanje %s v %s ni uspelo"
-#: elf/dl-close.c:384 elf/dl-open.c:470
+#: elf/dl-close.c:383 elf/dl-open.c:470
msgid "cannot create scope list"
msgstr "seznama podroÄja ni mogoÄe ustvariti"
-#: elf/dl-close.c:777
+#: elf/dl-close.c:776
msgid "shared object not open"
msgstr "deljeni predmet ni odprt"
@@ -461,11 +461,11 @@ msgstr "seznama iskalnih simbolov ni mogoÄe dodeliti"
msgid "Filters not supported with LD_TRACE_PRELINKING"
msgstr "Pri LD_TRACE_PRELINKING filtri niso podprti"
-#: elf/dl-error.c:76
+#: elf/dl-error.c:77
msgid "DYNAMIC LINKER BUG!!!"
msgstr "NAPAKA DINAMIÄŒNEGA POVEZOVALNIKA!!!"
-#: elf/dl-error.c:123
+#: elf/dl-error.c:127
msgid "error while loading shared libraries"
msgstr "napaka ob nalaganju deljene knjižnice"
@@ -489,159 +489,159 @@ msgstr "seznama sposobnosti ni mogoÄe ustvariti"
msgid "cannot allocate name record"
msgstr "zapisa imena ni mogoÄe dodeliti"
-#: elf/dl-load.c:542 elf/dl-load.c:658 elf/dl-load.c:743 elf/dl-load.c:862
+#: elf/dl-load.c:550 elf/dl-load.c:666 elf/dl-load.c:749 elf/dl-load.c:868
msgid "cannot create cache for search path"
msgstr "predpomnilnika za iskalno pot ni mogoÄe ustvariti"
-#: elf/dl-load.c:633
+#: elf/dl-load.c:641
msgid "cannot create RUNPATH/RPATH copy"
msgstr "kopije RUNPATH/RPATH ni mogoÄe ustvariti"
-#: elf/dl-load.c:729
+#: elf/dl-load.c:735
msgid "cannot create search path array"
msgstr "polja iskalnih poti ni mogoÄe ustvariti"
-#: elf/dl-load.c:934
+#: elf/dl-load.c:940
msgid "cannot stat shared object"
msgstr "statusa deljenega predmeta ni mogoÄe ugotoviti"
-#: elf/dl-load.c:1012
+#: elf/dl-load.c:1018
msgid "cannot open zero fill device"
msgstr "ni mogoÄe odpreti naprave /dev/zero"
-#: elf/dl-load.c:1059 elf/dl-load.c:2342
+#: elf/dl-load.c:1065 elf/dl-load.c:2348
msgid "cannot create shared object descriptor"
msgstr "deljenega predmetnega deskriptorja ni mogoÄe ustvariti"
-#: elf/dl-load.c:1078 elf/dl-load.c:1755 elf/dl-load.c:1858
+#: elf/dl-load.c:1084 elf/dl-load.c:1761 elf/dl-load.c:1864
msgid "cannot read file data"
msgstr "podatkov datoteke ni mogoÄe prebrati"
-#: elf/dl-load.c:1124
+#: elf/dl-load.c:1130
msgid "ELF load command alignment not page-aligned"
msgstr "poravnava ukaza ELF za nalaganje ni poravnana s stranjo"
-#: elf/dl-load.c:1131
+#: elf/dl-load.c:1137
msgid "ELF load command address/offset not properly aligned"
msgstr "naslov/odmik ukaza ELF za nalaganje ni primerno poravnan"
-#: elf/dl-load.c:1216
+#: elf/dl-load.c:1222
msgid "cannot allocate TLS data structures for initial thread"
msgstr "podatkovnih struktur TLS za zaÄetno nit ni mogoÄe dodeliti"
-#: elf/dl-load.c:1239
+#: elf/dl-load.c:1245
msgid "cannot handle TLS data"
msgstr "rokovanje s podatki TLS ni mogoÄe"
-#: elf/dl-load.c:1258
+#: elf/dl-load.c:1264
msgid "object file has no loadable segments"
msgstr "predmetna datoteka nima vÄitljivega segmenta"
-#: elf/dl-load.c:1294
+#: elf/dl-load.c:1300
msgid "failed to map segment from shared object"
msgstr "preslikava segmenta iz deljenega predmeta ni uspela"
-#: elf/dl-load.c:1320
+#: elf/dl-load.c:1326
msgid "cannot dynamically load executable"
msgstr "dinamiÄno nalaganje izvedljive datoteke ni mogoÄe"
-#: elf/dl-load.c:1383 elf/dl-load.c:1492
+#: elf/dl-load.c:1389 elf/dl-load.c:1498
msgid "cannot change memory protections"
msgstr "sprememba zaÅ¡Äite pomnilnika ni mogoÄa"
-#: elf/dl-load.c:1402
+#: elf/dl-load.c:1408
msgid "cannot map zero-fill pages"
msgstr "niÄelnih strani ni mogoÄe preslikati"
-#: elf/dl-load.c:1416
+#: elf/dl-load.c:1422
msgid "object file has no dynamic section"
msgstr "predmetna datoteka nima dinamiÄne sekcije"
-#: elf/dl-load.c:1439
+#: elf/dl-load.c:1445
msgid "shared object cannot be dlopen()ed"
msgstr "dlopen() na deljenih predmetih ni mogoÄ"
-#: elf/dl-load.c:1452
+#: elf/dl-load.c:1458
msgid "cannot allocate memory for program header"
msgstr "dodelitev pomnilnika za glavo programa ni mogoÄa"
-#: elf/dl-load.c:1469 elf/dl-open.c:195
+#: elf/dl-load.c:1475 elf/dl-open.c:195
msgid "invalid caller"
msgstr "neveljaven klicatelj"
-#: elf/dl-load.c:1512
+#: elf/dl-load.c:1518
msgid "cannot enable executable stack as shared object requires"
msgstr "izvedljivega sklada ni mogoÄe omogoÄiti, kot to zahteva deljeni predmet"
-#: elf/dl-load.c:1525
+#: elf/dl-load.c:1531
msgid "cannot close file descriptor"
msgstr "datoteÄnega deskriptorja ni mogoÄe zapreti"
-#: elf/dl-load.c:1755
+#: elf/dl-load.c:1761
msgid "file too short"
msgstr "datoteka je prekratka"
-#: elf/dl-load.c:1791
+#: elf/dl-load.c:1797
msgid "invalid ELF header"
msgstr "neveljavna glava ELF"
-#: elf/dl-load.c:1803
+#: elf/dl-load.c:1809
msgid "ELF file data encoding not big-endian"
msgstr "kodiranje podatkov datoteke ELF ni »big-endian«"
-#: elf/dl-load.c:1805
+#: elf/dl-load.c:1811
msgid "ELF file data encoding not little-endian"
msgstr "kodiranje podatkov datoteke ELF ni »little-endian«"
-#: elf/dl-load.c:1809
+#: elf/dl-load.c:1815
msgid "ELF file version ident does not match current one"
msgstr "identifikator razliÄice datoteke ELF se ne ujema s trenutnim"
-#: elf/dl-load.c:1813
+#: elf/dl-load.c:1819
msgid "ELF file OS ABI invalid"
msgstr "OS ABI datoteke ELF ni veljaven"
-#: elf/dl-load.c:1816
+#: elf/dl-load.c:1822
msgid "ELF file ABI version invalid"
msgstr "razliÄica ABI datoteke ELF ni veljavna"
-#: elf/dl-load.c:1819
+#: elf/dl-load.c:1825
msgid "nonzero padding in e_ident"
msgstr "neniÄelno zapolnjenje pri e_ident"
-#: elf/dl-load.c:1822
+#: elf/dl-load.c:1828
msgid "internal error"
msgstr "interna napaka"
-#: elf/dl-load.c:1829
+#: elf/dl-load.c:1835
msgid "ELF file version does not match current one"
msgstr "razliÄica datoteke ELF se ne ujema s trenutno"
-#: elf/dl-load.c:1837
+#: elf/dl-load.c:1843
msgid "only ET_DYN and ET_EXEC can be loaded"
msgstr "samo ET_DYN in ET_EXEC je mogoÄe naložiti"
-#: elf/dl-load.c:1843
+#: elf/dl-load.c:1849
msgid "ELF file's phentsize not the expected size"
msgstr "phentsize datoteke ELF ni priÄakovane velikosti"
-#: elf/dl-load.c:2361
+#: elf/dl-load.c:2367
msgid "wrong ELF class: ELFCLASS64"
msgstr "napaÄen razred ELF: ELFCLASS64"
-#: elf/dl-load.c:2362
+#: elf/dl-load.c:2368
msgid "wrong ELF class: ELFCLASS32"
msgstr "napaÄen razred ELF: ELFCLASS32"
-#: elf/dl-load.c:2365
+#: elf/dl-load.c:2371
msgid "cannot open shared object file"
msgstr "deljene predmetne datoteke ni mogoÄe odpreti"
-#: elf/dl-lookup.c:753 ports/sysdeps/mips/dl-lookup.c:771
+#: elf/dl-lookup.c:753 ports/sysdeps/mips/dl-lookup.c:770
msgid "relocation error"
msgstr "napaka pri premikanju"
-#: elf/dl-lookup.c:780 ports/sysdeps/mips/dl-lookup.c:798
+#: elf/dl-lookup.c:780 ports/sysdeps/mips/dl-lookup.c:797
msgid "symbol lookup error"
msgstr "napaka pri iskanju simbola"
@@ -657,41 +657,41 @@ msgstr "Zapletanje Å¡tevca generacij TLS! Prosim, javite to napako."
msgid "cannot load any more object with static TLS"
msgstr "nobenega predmeta s statiÄnim TLS ni veÄ mogoÄe naložiti"
-#: elf/dl-open.c:599
+#: elf/dl-open.c:602
msgid "invalid mode for dlopen()"
msgstr "neveljavni naÄin za dlopen()"
-#: elf/dl-open.c:616
+#: elf/dl-open.c:619
msgid "no more namespaces available for dlmopen()"
msgstr "nobenega imenskega prostora za dlmopen() ni veÄ na voljo"
-#: elf/dl-open.c:634
+#: elf/dl-open.c:637
msgid "invalid target namespace in dlmopen()"
msgstr "neveljavni ciljni imenski prostor pri dlmopen()"
-#: elf/dl-reloc.c:120
+#: elf/dl-reloc.c:158
msgid "cannot allocate memory in static TLS block"
msgstr "ni mogoÄe dodeliti pomnilnika v statiÄnem bloku TLS"
-#: elf/dl-reloc.c:212
+#: elf/dl-reloc.c:250
msgid "cannot make segment writable for relocation"
msgstr "segmenta se ne da odÅ¡Äititi za pisanje pred premikom"
-#: elf/dl-reloc.c:275
+#: elf/dl-reloc.c:313
#, c-format
msgid "%s: no PLTREL found in object %s\n"
msgstr "%s: v predmetu %s ni najti PLTREL\n"
-#: elf/dl-reloc.c:286
+#: elf/dl-reloc.c:324
#, c-format
msgid "%s: out of memory to store relocation results for %s\n"
msgstr "%s: pomnilnika ni dovolj za shranjevanje rezultatov premikanja %s\n"
-#: elf/dl-reloc.c:302
+#: elf/dl-reloc.c:340
msgid "cannot restore segment prot after reloc"
msgstr "zaÅ¡Äite segmenta po premiku ni mogoÄe povrniti"
-#: elf/dl-reloc.c:331
+#: elf/dl-reloc.c:369
msgid "cannot apply additional memory protection after relocation"
msgstr "dodatne zaÅ¡Äite pomnilnika po premiku ni mogoÄe uporabiti"
@@ -699,7 +699,7 @@ msgstr "dodatne zaÅ¡Äite pomnilnika po premiku ni mogoÄe uporabiti"
msgid "RTLD_NEXT used in code not dynamically loaded"
msgstr "RTLD_NEXT uporabljen v kodi se ni dinamiÄno naložil"
-#: elf/dl-tls.c:875
+#: elf/dl-tls.c:923
msgid "cannot create TLS data structures"
msgstr "podatkovnih struktur TLS ni mogoÄe ustvariti"
@@ -965,38 +965,38 @@ msgstr "ldd: izbira \\»%s« je dvoumna"
msgid "unrecognized option"
msgstr "neprepoznana izbira"
-#: elf/ldd.bash.in:88 elf/ldd.bash.in:126
+#: elf/ldd.bash.in:88 elf/ldd.bash.in:125
msgid "Try \\`ldd --help' for more information."
msgstr "Poskusite »ldd --help« za veÄ informacij."
-#: elf/ldd.bash.in:125
+#: elf/ldd.bash.in:124
msgid "missing file arguments"
msgstr "manjkajoÄi argumenti datoteke"
#. TRANS No such file or directory. This is a ``file doesn't exist'' error
#. TRANS for ordinary files that are referenced in contexts where they are
#. TRANS expected to already exist.
-#: elf/ldd.bash.in:148 sysdeps/gnu/errlist.c:36
+#: elf/ldd.bash.in:147 sysdeps/gnu/errlist.c:36
msgid "No such file or directory"
msgstr "Datoteka ali imenik s tem imenom ne obstaja"
-#: elf/ldd.bash.in:151 inet/rcmd.c:488
+#: elf/ldd.bash.in:150 inet/rcmd.c:488
msgid "not regular file"
msgstr "ni navadna datoteka"
-#: elf/ldd.bash.in:154
+#: elf/ldd.bash.in:153
msgid "warning: you do not have execution permission for"
msgstr "opozorilo: nimate dovoljenja za izvajanje za"
-#: elf/ldd.bash.in:183
+#: elf/ldd.bash.in:182
msgid "\tnot a dynamic executable"
msgstr "\tni dinamiÄna izvedljiva datoteka"
-#: elf/ldd.bash.in:191
+#: elf/ldd.bash.in:190
msgid "exited with unknown exit code"
msgstr "zakljuÄek z neznano izhodno kodo"
-#: elf/ldd.bash.in:196
+#: elf/ldd.bash.in:195
msgid "error: you do not have read permission for"
msgstr "napaka: nimate dovoljenja za branje za"
@@ -1198,24 +1198,20 @@ msgid ""
msgstr ""
#: elf/sotruss.ksh:46
-#, fuzzy
msgid "Mandatory arguments to long options are also mandatory for any corresponding\\nshort options.\\n"
-msgstr "Argumenti, navedeni kot obvezni ali neobvezni pri dolgi obliki izbire, so obvezni ali neobvezni tudi pri vseh odgovarjajoÄih kratkih oblikah."
+msgstr "Argumenti, navedeni kot obvezni ali neobvezni pri dolgi obliki izbire, so\\nobvezni ali neobvezni tudi pri vseh odgovarjajoÄih kratkih oblikah.\\n"
#: elf/sotruss.ksh:55
-#, fuzzy
msgid "%s: option requires an argument -- '%s'\\n"
-msgstr "%s: izbira zahteva argument -- »%c«\n"
+msgstr "%s: izbira zahteva argument -- »%s«\\n"
#: elf/sotruss.ksh:61
-#, fuzzy
msgid "%s: option is ambiguous; possibilities:"
-msgstr "%s: izbira »%s« ni enopomenska; možnosti so:"
+msgstr "%s: izbira ni enopomenska; možnosti so:"
#: elf/sotruss.ksh:79
-#, fuzzy
msgid "Written by %s.\\n"
-msgstr "Avtor(ica): %s.\n"
+msgstr "Avtor(ica): %s.\\n"
#: elf/sotruss.ksh:86
msgid ""
@@ -1226,14 +1222,12 @@ msgid ""
msgstr ""
#: elf/sotruss.ksh:134
-#, fuzzy
msgid "%s: unrecognized option '%c%s'\\n"
-msgstr "%s: neprepoznana izbira »%c%s«\n"
+msgstr "%s: neprepoznana izbira »%c%s«\\n"
#: elf/sprof.c:77
-#, fuzzy
msgid "Output selection:"
-msgstr "Izbira izhodne datoteke:\n"
+msgstr "Izbira izhoda:"
#: elf/sprof.c:79
msgid "print list of count paths and their number of use"
@@ -1256,46 +1250,46 @@ msgid "SHOBJ [PROFDATA]"
msgstr ""
#: elf/sprof.c:433
-#, fuzzy, c-format
+#, c-format
msgid "failed to load shared object `%s'"
-msgstr "zapiranje %s ni uspelo"
+msgstr "nalaganje deljenega predmeta »%s« ni uspelo"
#: elf/sprof.c:442
-#, fuzzy, c-format
+#, c-format
msgid "cannot create internal descriptors"
-msgstr "imenika %s ni mogoÄe ustvariti"
+msgstr "internih deskriptorjev ni mogoÄe ustvariti"
#: elf/sprof.c:554
#, c-format
msgid "Reopening shared object `%s' failed"
-msgstr ""
+msgstr "Ponovno odpiranje deljenega predmeta »%s« ni uspelo"
#: elf/sprof.c:561 elf/sprof.c:656
-#, fuzzy, c-format
+#, c-format
msgid "reading of section headers failed"
-msgstr "ustvarjanje niti ni uspelo"
+msgstr "branje zaglavij razdelkov ni uspelo"
#: elf/sprof.c:569 elf/sprof.c:664
-#, fuzzy, c-format
+#, c-format
msgid "reading of section header string table failed"
-msgstr "niti za pisanje ni bilo mogoÄe ustvariti"
+msgstr "branje tabele nizov zaglavja razdelka ni uspelo"
# POZOR!!! Razisci, kaj program res tu pocne!
# ! INEXACT
#: elf/sprof.c:595
-#, fuzzy, c-format
+#, c-format
msgid "*** Cannot read debuginfo file name: %m\n"
-msgstr "ni mogoÄe prebrati imen datotek iz %s"
+msgstr "*** Ni mogoÄe prebrati imena datoteke debuginfo: %m\n"
#: elf/sprof.c:616
-#, fuzzy, c-format
+#, c-format
msgid "cannot determine file name"
-msgstr "imena raÄunalnika ni mogoÄe ugotoviti"
+msgstr "imena datoteke ni mogoÄe ugotoviti"
#: elf/sprof.c:649
-#, fuzzy, c-format
+#, c-format
msgid "reading of ELF header failed"
-msgstr "ustvarjanje niti ni uspelo"
+msgstr "branje zaglavja ELF ni uspelo"
#: elf/sprof.c:685
#, c-format
@@ -1303,9 +1297,9 @@ msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
msgstr ""
#: elf/sprof.c:715
-#, fuzzy, c-format
+#, c-format
msgid "failed to load symbol data"
-msgstr "ni mogoÄe ustvariti simbolne povezave %s"
+msgstr "nalaganje simbolnih podatkov ni uspelo"
#: elf/sprof.c:780
#, c-format
@@ -1328,14 +1322,14 @@ msgid "failed to mmap the profiling data file"
msgstr ""
#: elf/sprof.c:816
-#, fuzzy, c-format
+#, c-format
msgid "error while closing the profiling data file"
-msgstr "napaka pri pisanju na datoteko »%s«"
+msgstr "napaka pri zapiranju datoteke s podatki za profiliranje"
#: elf/sprof.c:825 elf/sprof.c:923
-#, fuzzy, c-format
+#, c-format
msgid "cannot create internal descriptor"
-msgstr "Ni možno zapreti datoteÄnega deskriptorja"
+msgstr "internega deskriptorja ni mogoÄe ustvariti"
#: elf/sprof.c:899
#, c-format
@@ -1343,19 +1337,19 @@ msgid "`%s' is no correct profile data file for `%s'"
msgstr ""
#: elf/sprof.c:1080 elf/sprof.c:1138
-#, fuzzy, c-format
+#, c-format
msgid "cannot allocate symbol data"
-msgstr "ni mogoÄe ustvariti simbolne povezave %s"
+msgstr "prostora za simbolne podatke ni mogoÄe dodeliti"
#: iconv/iconv_charmap.c:141 iconv/iconv_prog.c:448
-#, fuzzy, c-format
+#, c-format
msgid "cannot open output file"
-msgstr "Vhodne datoteke %s ni mogoÄe odpreti"
+msgstr "izhodne datoteke ni mogoÄe odpreti"
#: iconv/iconv_charmap.c:187 iconv/iconv_prog.c:311
-#, fuzzy, c-format
+#, c-format
msgid "error while closing input `%s'"
-msgstr "Napaka pri zapiranju %s"
+msgstr "napaka pri zapiranju vhoda »%s«"
#: iconv/iconv_charmap.c:461
#, c-format
@@ -1363,120 +1357,110 @@ msgid "illegal input sequence at position %Zd"
msgstr ""
#: iconv/iconv_charmap.c:480 iconv/iconv_prog.c:539
-#, fuzzy, c-format
+#, c-format
msgid "incomplete character or shift sequence at end of buffer"
-msgstr "%s:%u:%u nepopolni znak ali pomiÄno zaporedje"
+msgstr "nepopolni znak ali pomiÄno zaporedje na koncu medpomnilnika"
#: iconv/iconv_charmap.c:525 iconv/iconv_charmap.c:561 iconv/iconv_prog.c:582
#: iconv/iconv_prog.c:618
-#, fuzzy, c-format
+#, c-format
msgid "error while reading the input"
msgstr "napaka pri branju vhoda"
#: iconv/iconv_charmap.c:543 iconv/iconv_prog.c:600
-#, fuzzy, c-format
+#, c-format
msgid "unable to allocate buffer for input"
-msgstr "pomnilnika ni mogoÄe dodeliti"
+msgstr "vhodnega medpomnilnika ni mogoÄe dodeliti"
#: iconv/iconv_prog.c:59
-#, fuzzy
msgid "Input/Output format specification:"
-msgstr "podana je veÄ kot ena oblika izhoda"
+msgstr "Specifikacija V/I zapisa:"
#: iconv/iconv_prog.c:60
msgid "encoding of original text"
-msgstr ""
+msgstr "kodiranje izvirnega besedila"
#: iconv/iconv_prog.c:61
-#, fuzzy
msgid "encoding for output"
-msgstr "izhod dodajamo na konec %s"
+msgstr "prekodiranje za izhod"
#: iconv/iconv_prog.c:62
-#, fuzzy
msgid "Information:"
-msgstr "Informacijski zahtevek"
+msgstr "Informacija:"
#: iconv/iconv_prog.c:63
msgid "list all known coded character sets"
-msgstr ""
+msgstr "seznam vseh znanih naborov znakov"
-#: iconv/iconv_prog.c:64 locale/programs/localedef.c:127
-#, fuzzy
+#: iconv/iconv_prog.c:64 locale/programs/localedef.c:129
msgid "Output control:"
-msgstr "Nadzor nad pisanjem prek:"
+msgstr "Nadzor nad izhodom:"
#: iconv/iconv_prog.c:65
-#, fuzzy
msgid "omit invalid characters from output"
-msgstr "neveljavni razred znakov %s"
+msgstr "izpusti neveljavne znake na izhodu"
#: iconv/iconv_prog.c:66 iconv/iconvconfig.c:128
-#: locale/programs/localedef.c:120 locale/programs/localedef.c:122
-#: locale/programs/localedef.c:124 locale/programs/localedef.c:145
+#: locale/programs/localedef.c:122 locale/programs/localedef.c:124
+#: locale/programs/localedef.c:126 locale/programs/localedef.c:147
#: malloc/memusagestat.c:56
msgid "FILE"
msgstr "DATOTEKA"
#: iconv/iconv_prog.c:66
-#, fuzzy
msgid "output file"
-msgstr "zapiramo izhodno datoteko %s"
+msgstr "izhodna datoteka"
#: iconv/iconv_prog.c:67
-#, fuzzy
msgid "suppress warnings"
-msgstr "%s%s: opozorilo: "
+msgstr "brez izpisa opozoril"
#: iconv/iconv_prog.c:68
-#, fuzzy
msgid "print progress information"
-msgstr "izpis izdaje programa"
+msgstr "izpis informacije o napredku"
#: iconv/iconv_prog.c:73
-#, fuzzy
msgid "Convert encoding of given files from one encoding to another."
-msgstr "Pretvori besedilo iz enega kodnega nabora v drugega.\n"
+msgstr "Pretvori navedene datoteke iz enega kodnega nabora v drugega."
#: iconv/iconv_prog.c:77
-#, fuzzy
msgid "[FILE...]"
-msgstr "[DATOTEKA]..."
+msgstr "[DATOTEKA...]"
#: iconv/iconv_prog.c:233
-#, fuzzy, c-format
+#, c-format
msgid "conversions from `%s' and to `%s' are not supported"
-msgstr "pretvorba iz nabora %s v nabor %s ni podprta"
+msgstr "pretvorbe iz nabora »%s« v nabor »%s« niso podprte"
#: iconv/iconv_prog.c:238
-#, fuzzy, c-format
+#, c-format
msgid "conversion from `%s' is not supported"
-msgstr "pretvorba iz nabora %s ni podprta"
+msgstr "pretvorbe iz nabora »%s« niso podprte"
#: iconv/iconv_prog.c:245
-#, fuzzy, c-format
+#, c-format
msgid "conversion to `%s' is not supported"
-msgstr "pretvorba v nabor %s ni podprta"
+msgstr "pretvorbe v nabor »%s« niso podprte"
#: iconv/iconv_prog.c:249
-#, fuzzy, c-format
+#, c-format
msgid "conversion from `%s' to `%s' is not supported"
-msgstr "pretvorba iz nabora %s v nabor %s ni podprta"
+msgstr "pretvorba iz »%s« v nabor »%s« ni podprta"
#: iconv/iconv_prog.c:259
-#, fuzzy, c-format
+#, c-format
msgid "failed to start conversion processing"
-msgstr "branje skupine za trenutni proces ni uspelo"
+msgstr "zagon procesa pretvorbe ni uspel"
#: iconv/iconv_prog.c:357
-#, fuzzy, c-format
+#, c-format
msgid "error while closing output file"
-msgstr "napaka pri zapiranju datoteke"
+msgstr "napaka pri zapiranju izhodne datoteke"
#: iconv/iconv_prog.c:458
#, c-format
msgid "conversion stopped due to problem in writing the output"
-msgstr ""
+msgstr "pretvorba ustavljena zaradi težav pri pisanju na izhod"
#: iconv/iconv_prog.c:535
#, c-format
@@ -1484,18 +1468,18 @@ msgid "illegal input sequence at position %ld"
msgstr ""
#: iconv/iconv_prog.c:543
-#, fuzzy, c-format
+#, c-format
msgid "internal error (illegal descriptor)"
-msgstr "interna napaka (to tega ne bi smelo priti)"
+msgstr "interna napaka (neveljavni deskriptor)"
#: iconv/iconv_prog.c:546
-#, fuzzy, c-format
+#, c-format
msgid "unknown iconv() error %d"
-msgstr "Neznana napaka"
+msgstr "neznana napaka iconv() %d"
#: iconv/iconv_prog.c:791
msgid ""
-"The following list contain all the coded character sets known. This does\n"
+"The following list contains all the coded character sets known. This does\n"
"not necessarily mean that all combinations of these names can be used for\n"
"the FROM and TO command line parameters. One coded character set can be\n"
"listed with several different names (aliases).\n"
@@ -1508,13 +1492,12 @@ msgid "Create fastloading iconv module configuration file."
msgstr ""
#: iconv/iconvconfig.c:113
-#, fuzzy
msgid "[DIR...]"
-msgstr "[ARGUMENT...]"
+msgstr "[IMENIK...]"
-#: iconv/iconvconfig.c:126 locale/programs/localedef.c:131
+#: iconv/iconvconfig.c:126 locale/programs/localedef.c:133
msgid "PATH"
-msgstr ""
+msgstr "POT"
#: iconv/iconvconfig.c:127
msgid "Prefix used for all file accesses"
@@ -1533,7 +1516,7 @@ msgstr ""
msgid "Directory arguments required when using --nostdlib"
msgstr ""
-#: iconv/iconvconfig.c:341 locale/programs/localedef.c:288
+#: iconv/iconvconfig.c:341 locale/programs/localedef.c:294
#, c-format
msgid "no output file produced because warnings were issued"
msgstr ""
@@ -1544,28 +1527,27 @@ msgid "while inserting in search tree"
msgstr ""
#: iconv/iconvconfig.c:1239
-#, fuzzy, c-format
+#, c-format
msgid "cannot generate output file"
-msgstr "izhodne datoteke \"%s\" ni mogoÄe ustvariti"
+msgstr "izhodne datoteke ni mogoÄe ustvariti"
#: inet/rcmd.c:163
-#, fuzzy
msgid "rcmd: Cannot allocate memory\n"
-msgstr "rmtd: Ni mogoÄe rezervirati prostora za medpomnilnik\n"
+msgstr "rcmd: Pomnilnika ni mogoÄe rezervirati\n"
#: inet/rcmd.c:178
msgid "rcmd: socket: All ports in use\n"
-msgstr ""
+msgstr "rcmd: vtiÄnica: Vsa vrata so v rabi\n"
#: inet/rcmd.c:206
-#, fuzzy, c-format
+#, c-format
msgid "connect to address %s: "
-msgstr "dostop do %s ni mogoÄ"
+msgstr "priklapljanje na naslov %s: "
#: inet/rcmd.c:219
-#, fuzzy, c-format
+#, c-format
msgid "Trying %s...\n"
-msgstr "Pridobivamo %s..."
+msgstr "Poskuša se %s...\n"
#: inet/rcmd.c:255
#, c-format
@@ -1591,19 +1573,16 @@ msgid "rcmd: %s: short read"
msgstr ""
#: inet/rcmd.c:486
-#, fuzzy
msgid "lstat failed"
-msgstr "poizvedba po statusu ni uspela"
+msgstr "lstat ni uspel"
#: inet/rcmd.c:493
-#, fuzzy
msgid "cannot open"
-msgstr "ni mogoÄe odpreti %s"
+msgstr "ni mogoÄe odpreti"
#: inet/rcmd.c:495
-#, fuzzy
msgid "fstat failed"
-msgstr "poizvedba po statusu ni uspela"
+msgstr "fstat ni uspel"
#: inet/rcmd.c:497
msgid "bad owner"
@@ -1630,14 +1609,13 @@ msgid "Remove password or make file unreadable by others."
msgstr ""
#: inet/ruserpass.c:277
-#, fuzzy, c-format
+#, c-format
msgid "Unknown .netrc keyword %s"
-msgstr "Neznana napaka"
+msgstr "Neznana kljuÄna beseda .netrc %s"
#: libidn/nfkc.c:463
-#, fuzzy
msgid "Character out of range for UTF-8"
-msgstr "koda znaka izven obsega"
+msgstr "Znak izven obsega UTF-8"
#: locale/programs/charmap-dir.c:57
#, fuzzy, c-format
@@ -1675,8 +1653,8 @@ msgstr "napaka v %s: %s"
msgid "invalid definition"
msgstr "%s:%d: neveljavna definicija niza"
-#: locale/programs/charmap.c:375 locale/programs/locfile.c:125
-#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175
+#: locale/programs/charmap.c:375 locale/programs/locfile.c:131
+#: locale/programs/locfile.c:158 locale/programs/repertoire.c:175
#, fuzzy
msgid "bad argument"
msgstr "neveljavni argument %s"
@@ -1739,14 +1717,14 @@ msgstr "preveÄ znakov v množici"
msgid "no symbolic name given for end of range"
msgstr ""
-#: locale/programs/charmap.c:610 locale/programs/ld-address.c:602
-#: locale/programs/ld-collate.c:2767 locale/programs/ld-collate.c:3925
-#: locale/programs/ld-ctype.c:2256 locale/programs/ld-ctype.c:3007
-#: locale/programs/ld-identification.c:452
-#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332
-#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:307
-#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241
-#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221
+#: locale/programs/charmap.c:610 locale/programs/ld-address.c:528
+#: locale/programs/ld-collate.c:2626 locale/programs/ld-collate.c:3784
+#: locale/programs/ld-ctype.c:2159 locale/programs/ld-ctype.c:2910
+#: locale/programs/ld-identification.c:368
+#: locale/programs/ld-measurement.c:215 locale/programs/ld-messages.c:298
+#: locale/programs/ld-monetary.c:740 locale/programs/ld-name.c:264
+#: locale/programs/ld-numeric.c:326 locale/programs/ld-paper.c:214
+#: locale/programs/ld-telephone.c:278 locale/programs/ld-time.c:943
#: locale/programs/repertoire.c:313
#, c-format
msgid "%1$s: definition does not end with `END %1$s'"
@@ -1766,15 +1744,15 @@ msgstr ""
msgid "%s: error in state machine"
msgstr "%s: napaka pri krajšanju"
-#: locale/programs/charmap.c:850 locale/programs/ld-address.c:618
-#: locale/programs/ld-collate.c:2764 locale/programs/ld-collate.c:4118
-#: locale/programs/ld-ctype.c:2253 locale/programs/ld-ctype.c:3024
-#: locale/programs/ld-identification.c:468
-#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348
-#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:323
-#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257
-#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237
-#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324
+#: locale/programs/charmap.c:850 locale/programs/ld-address.c:544
+#: locale/programs/ld-collate.c:2623 locale/programs/ld-collate.c:3977
+#: locale/programs/ld-ctype.c:2156 locale/programs/ld-ctype.c:2927
+#: locale/programs/ld-identification.c:384
+#: locale/programs/ld-measurement.c:231 locale/programs/ld-messages.c:314
+#: locale/programs/ld-monetary.c:756 locale/programs/ld-name.c:280
+#: locale/programs/ld-numeric.c:342 locale/programs/ld-paper.c:230
+#: locale/programs/ld-telephone.c:294 locale/programs/ld-time.c:959
+#: locale/programs/locfile.c:1000 locale/programs/repertoire.c:324
#, fuzzy, c-format
msgid "%s: premature end of file"
msgstr "PredÄasen znak za konec datoteke"
@@ -1789,7 +1767,7 @@ msgstr ""
msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
msgstr ""
-#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3044
+#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2903
#: locale/programs/repertoire.c:419
#, fuzzy
msgid "invalid names for character range"
@@ -1813,8 +1791,8 @@ msgstr ""
msgid "resulting bytes for range not representable."
msgstr "vrednost %s je tolikšna, da ni strojno predstavljiva"
-#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1558
-#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:133
+#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1565
+#: locale/programs/ld-ctype.c:462 locale/programs/ld-identification.c:133
#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97
#: locale/programs/ld-monetary.c:193 locale/programs/ld-name.c:94
#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91
@@ -1877,526 +1855,526 @@ msgstr "Del %s ne ustreza %s"
msgid "%s: numeric country code `%d' not valid"
msgstr ""
-#: locale/programs/ld-address.c:510 locale/programs/ld-address.c:547
-#: locale/programs/ld-address.c:585 locale/programs/ld-ctype.c:2631
-#: locale/programs/ld-identification.c:364
-#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301
-#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735
-#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:280
-#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224
-#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126
-#: locale/programs/ld-time.c:1168
+#: locale/programs/ld-address.c:436 locale/programs/ld-address.c:473
+#: locale/programs/ld-address.c:511 locale/programs/ld-ctype.c:2534
+#: locale/programs/ld-identification.c:280
+#: locale/programs/ld-measurement.c:198 locale/programs/ld-messages.c:267
+#: locale/programs/ld-monetary.c:495 locale/programs/ld-monetary.c:530
+#: locale/programs/ld-monetary.c:571 locale/programs/ld-name.c:237
+#: locale/programs/ld-numeric.c:218 locale/programs/ld-paper.c:197
+#: locale/programs/ld-telephone.c:253 locale/programs/ld-time.c:848
+#: locale/programs/ld-time.c:890
#, fuzzy, c-format
msgid "%s: field `%s' declared more than once"
msgstr "izbira --output: polje %s je uporabljeno veÄ kot enkrat"
-#: locale/programs/ld-address.c:514 locale/programs/ld-address.c:552
-#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311
-#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739
-#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267
-#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020
-#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131
+#: locale/programs/ld-address.c:440 locale/programs/ld-address.c:478
+#: locale/programs/ld-identification.c:284 locale/programs/ld-messages.c:277
+#: locale/programs/ld-monetary.c:499 locale/programs/ld-monetary.c:534
+#: locale/programs/ld-name.c:241 locale/programs/ld-numeric.c:222
+#: locale/programs/ld-telephone.c:257 locale/programs/ld-time.c:742
+#: locale/programs/ld-time.c:811 locale/programs/ld-time.c:853
#, fuzzy, c-format
msgid "%s: unknown character in field `%s'"
msgstr "zablodeli znak v doloÄilu polja"
-#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:3923
-#: locale/programs/ld-ctype.c:3004 locale/programs/ld-identification.c:449
-#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330
-#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:305
-#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239
-#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219
+#: locale/programs/ld-address.c:525 locale/programs/ld-collate.c:3782
+#: locale/programs/ld-ctype.c:2907 locale/programs/ld-identification.c:365
+#: locale/programs/ld-measurement.c:212 locale/programs/ld-messages.c:296
+#: locale/programs/ld-monetary.c:738 locale/programs/ld-name.c:262
+#: locale/programs/ld-numeric.c:324 locale/programs/ld-paper.c:212
+#: locale/programs/ld-telephone.c:276 locale/programs/ld-time.c:941
#, c-format
msgid "%s: incomplete `END' line"
msgstr ""
-#: locale/programs/ld-address.c:609 locale/programs/ld-collate.c:544
-#: locale/programs/ld-collate.c:596 locale/programs/ld-collate.c:892
-#: locale/programs/ld-collate.c:905 locale/programs/ld-collate.c:2733
-#: locale/programs/ld-collate.c:2754 locale/programs/ld-collate.c:4108
-#: locale/programs/ld-ctype.c:1985 locale/programs/ld-ctype.c:2243
-#: locale/programs/ld-ctype.c:2829 locale/programs/ld-ctype.c:3015
-#: locale/programs/ld-identification.c:459
-#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339
-#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:314
-#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248
-#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228
+#: locale/programs/ld-address.c:535 locale/programs/ld-collate.c:551
+#: locale/programs/ld-collate.c:603 locale/programs/ld-collate.c:899
+#: locale/programs/ld-collate.c:912 locale/programs/ld-collate.c:2592
+#: locale/programs/ld-collate.c:2613 locale/programs/ld-collate.c:3967
+#: locale/programs/ld-ctype.c:1888 locale/programs/ld-ctype.c:2146
+#: locale/programs/ld-ctype.c:2732 locale/programs/ld-ctype.c:2918
+#: locale/programs/ld-identification.c:375
+#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:305
+#: locale/programs/ld-monetary.c:747 locale/programs/ld-name.c:271
+#: locale/programs/ld-numeric.c:333 locale/programs/ld-paper.c:221
+#: locale/programs/ld-telephone.c:285 locale/programs/ld-time.c:950
#, fuzzy, c-format
msgid "%s: syntax error"
msgstr "napaka v skladnji"
-#: locale/programs/ld-collate.c:419
+#: locale/programs/ld-collate.c:426
#, c-format
msgid "`%.*s' already defined in charmap"
msgstr ""
-#: locale/programs/ld-collate.c:428
+#: locale/programs/ld-collate.c:435
#, c-format
msgid "`%.*s' already defined in repertoire"
msgstr ""
-#: locale/programs/ld-collate.c:435
+#: locale/programs/ld-collate.c:442
#, c-format
msgid "`%.*s' already defined as collating symbol"
msgstr ""
-#: locale/programs/ld-collate.c:442
+#: locale/programs/ld-collate.c:449
#, c-format
msgid "`%.*s' already defined as collating element"
msgstr ""
-#: locale/programs/ld-collate.c:473 locale/programs/ld-collate.c:499
+#: locale/programs/ld-collate.c:480 locale/programs/ld-collate.c:506
#, c-format
msgid "%s: `forward' and `backward' are mutually excluding each other"
msgstr ""
-#: locale/programs/ld-collate.c:483 locale/programs/ld-collate.c:509
-#: locale/programs/ld-collate.c:525
+#: locale/programs/ld-collate.c:490 locale/programs/ld-collate.c:516
+#: locale/programs/ld-collate.c:532
#, c-format
msgid "%s: `%s' mentioned more than once in definition of weight %d"
msgstr ""
-#: locale/programs/ld-collate.c:581
+#: locale/programs/ld-collate.c:588
#, c-format
msgid "%s: too many rules; first entry only had %d"
msgstr ""
-#: locale/programs/ld-collate.c:617
+#: locale/programs/ld-collate.c:624
#, fuzzy, c-format
msgid "%s: not enough sorting rules"
msgstr "z uporabo %s pravil za urejanje"
-#: locale/programs/ld-collate.c:782
+#: locale/programs/ld-collate.c:789
#, fuzzy, c-format
msgid "%s: empty weight string not allowed"
msgstr "prazen %s ni dovoljen"
-#: locale/programs/ld-collate.c:877
+#: locale/programs/ld-collate.c:884
#, c-format
msgid "%s: weights must use the same ellipsis symbol as the name"
msgstr ""
-#: locale/programs/ld-collate.c:933
+#: locale/programs/ld-collate.c:940
#, fuzzy, c-format
msgid "%s: too many values"
msgstr "%s: PreveÄ argumentov\n"
-#: locale/programs/ld-collate.c:1053 locale/programs/ld-collate.c:1228
+#: locale/programs/ld-collate.c:1060 locale/programs/ld-collate.c:1235
#, c-format
msgid "order for `%.*s' already defined at %s:%Zu"
msgstr ""
-#: locale/programs/ld-collate.c:1103
+#: locale/programs/ld-collate.c:1110
#, c-format
msgid "%s: the start and the end symbol of a range must stand for characters"
msgstr ""
-#: locale/programs/ld-collate.c:1130
+#: locale/programs/ld-collate.c:1137
#, c-format
msgid "%s: byte sequences of first and last character must have the same length"
msgstr ""
-#: locale/programs/ld-collate.c:1172
+#: locale/programs/ld-collate.c:1179
#, c-format
msgid "%s: byte sequence of first character of range is not lower than that of the last character"
msgstr ""
-#: locale/programs/ld-collate.c:1297
+#: locale/programs/ld-collate.c:1304
#, c-format
msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
msgstr ""
-#: locale/programs/ld-collate.c:1301
+#: locale/programs/ld-collate.c:1308
#, c-format
msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
msgstr ""
-#: locale/programs/ld-collate.c:1321 locale/programs/ld-ctype.c:1502
+#: locale/programs/ld-collate.c:1328 locale/programs/ld-ctype.c:1405
#, c-format
msgid "`%s' and `%.*s' are not valid names for symbolic range"
msgstr ""
-#: locale/programs/ld-collate.c:1371 locale/programs/ld-collate.c:3859
+#: locale/programs/ld-collate.c:1378 locale/programs/ld-collate.c:3718
#, c-format
msgid "%s: order for `%.*s' already defined at %s:%Zu"
msgstr ""
-#: locale/programs/ld-collate.c:1380
+#: locale/programs/ld-collate.c:1387
#, fuzzy, c-format
msgid "%s: `%s' must be a character"
msgstr "razmejilnik mora biti en sam znak"
-#: locale/programs/ld-collate.c:1575
+#: locale/programs/ld-collate.c:1582
#, c-format
msgid "%s: `position' must be used for a specific level in all sections or none"
msgstr ""
-#: locale/programs/ld-collate.c:1600
+#: locale/programs/ld-collate.c:1607
#, fuzzy, c-format
msgid "symbol `%s' not defined"
msgstr "tip terminala »%s« ni doloÄen"
-#: locale/programs/ld-collate.c:1676 locale/programs/ld-collate.c:1782
+#: locale/programs/ld-collate.c:1683 locale/programs/ld-collate.c:1789
#, c-format
msgid "symbol `%s' has the same encoding as"
msgstr ""
-#: locale/programs/ld-collate.c:1680 locale/programs/ld-collate.c:1786
+#: locale/programs/ld-collate.c:1687 locale/programs/ld-collate.c:1793
#, c-format
msgid "symbol `%s'"
msgstr ""
-#: locale/programs/ld-collate.c:1828
+#: locale/programs/ld-collate.c:1833
#, c-format
msgid "no definition of `UNDEFINED'"
msgstr ""
-#: locale/programs/ld-collate.c:1857
+#: locale/programs/ld-collate.c:1862
#, fuzzy, c-format
msgid "too many errors; giving up"
msgstr "preveÄ napak, nadaljevanje ni možno"
-#: locale/programs/ld-collate.c:2659 locale/programs/ld-collate.c:4047
+#: locale/programs/ld-collate.c:2518 locale/programs/ld-collate.c:3906
#, fuzzy, c-format
msgid "%s: nested conditionals not supported"
msgstr "ukaz »e« ni podprt"
-#: locale/programs/ld-collate.c:2677
-#, c-format
-msgid "%s: more then one 'else'"
-msgstr ""
+#: locale/programs/ld-collate.c:2536
+#, fuzzy, c-format
+msgid "%s: more than one 'else'"
+msgstr "nobena izbira za pretvorbo ni podana"
-#: locale/programs/ld-collate.c:2852
+#: locale/programs/ld-collate.c:2711
#, fuzzy, c-format
msgid "%s: duplicate definition of `%s'"
msgstr "podvojena definicija sporoÄila"
-#: locale/programs/ld-collate.c:2888
+#: locale/programs/ld-collate.c:2747
#, c-format
msgid "%s: duplicate declaration of section `%s'"
msgstr ""
-#: locale/programs/ld-collate.c:3024
+#: locale/programs/ld-collate.c:2883
#, fuzzy, c-format
msgid "%s: unknown character in collating symbol name"
msgstr "%s: neznano dejanje za kontrolno toÄko"
-#: locale/programs/ld-collate.c:3153
+#: locale/programs/ld-collate.c:3012
#, c-format
msgid "%s: unknown character in equivalent definition name"
msgstr ""
-#: locale/programs/ld-collate.c:3164
+#: locale/programs/ld-collate.c:3023
#, c-format
msgid "%s: unknown character in equivalent definition value"
msgstr ""
-#: locale/programs/ld-collate.c:3174
+#: locale/programs/ld-collate.c:3033
#, c-format
msgid "%s: unknown symbol `%s' in equivalent definition"
msgstr ""
-#: locale/programs/ld-collate.c:3183
+#: locale/programs/ld-collate.c:3042
#, fuzzy
msgid "error while adding equivalent collating symbol"
msgstr "Napaka pri brisanju %s"
-#: locale/programs/ld-collate.c:3221
+#: locale/programs/ld-collate.c:3080
#, fuzzy, c-format
msgid "duplicate definition of script `%s'"
msgstr "podvojena definicija sporoÄila"
-#: locale/programs/ld-collate.c:3269
+#: locale/programs/ld-collate.c:3128
#, fuzzy, c-format
msgid "%s: unknown section name `%.*s'"
msgstr "Neznano ime signala: %s"
-#: locale/programs/ld-collate.c:3298
+#: locale/programs/ld-collate.c:3157
#, c-format
msgid "%s: multiple order definitions for section `%s'"
msgstr ""
-#: locale/programs/ld-collate.c:3326
+#: locale/programs/ld-collate.c:3185
#, fuzzy, c-format
msgid "%s: invalid number of sorting rules"
msgstr "%s: neveljavno Å¡tevilo vrstic"
-#: locale/programs/ld-collate.c:3353
+#: locale/programs/ld-collate.c:3212
#, c-format
msgid "%s: multiple order definitions for unnamed section"
msgstr ""
-#: locale/programs/ld-collate.c:3408 locale/programs/ld-collate.c:3538
-#: locale/programs/ld-collate.c:3901
+#: locale/programs/ld-collate.c:3267 locale/programs/ld-collate.c:3397
+#: locale/programs/ld-collate.c:3760
#, c-format
msgid "%s: missing `order_end' keyword"
msgstr ""
-#: locale/programs/ld-collate.c:3471
+#: locale/programs/ld-collate.c:3330
#, c-format
msgid "%s: order for collating symbol %.*s not yet defined"
msgstr ""
-#: locale/programs/ld-collate.c:3489
+#: locale/programs/ld-collate.c:3348
#, c-format
msgid "%s: order for collating element %.*s not yet defined"
msgstr ""
-#: locale/programs/ld-collate.c:3500
+#: locale/programs/ld-collate.c:3359
#, c-format
msgid "%s: cannot reorder after %.*s: symbol not known"
msgstr ""
-#: locale/programs/ld-collate.c:3552 locale/programs/ld-collate.c:3913
+#: locale/programs/ld-collate.c:3411 locale/programs/ld-collate.c:3772
#, c-format
msgid "%s: missing `reorder-end' keyword"
msgstr ""
-#: locale/programs/ld-collate.c:3586 locale/programs/ld-collate.c:3784
+#: locale/programs/ld-collate.c:3445 locale/programs/ld-collate.c:3643
#, c-format
msgid "%s: section `%.*s' not known"
msgstr ""
-#: locale/programs/ld-collate.c:3651
+#: locale/programs/ld-collate.c:3510
#, c-format
msgid "%s: bad symbol <%.*s>"
msgstr ""
-#: locale/programs/ld-collate.c:3847
+#: locale/programs/ld-collate.c:3706
#, c-format
msgid "%s: cannot have `%s' as end of ellipsis range"
msgstr ""
-#: locale/programs/ld-collate.c:3897
+#: locale/programs/ld-collate.c:3756
#, fuzzy, c-format
msgid "%s: empty category description not allowed"
msgstr "prazen %s ni dovoljen"
-#: locale/programs/ld-collate.c:3916
+#: locale/programs/ld-collate.c:3775
#, c-format
msgid "%s: missing `reorder-sections-end' keyword"
msgstr ""
-#: locale/programs/ld-collate.c:4080
+#: locale/programs/ld-collate.c:3939
#, fuzzy, c-format
msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
msgstr "Najdeno »~%c« brez ujemajoÄega »~%c«."
-#: locale/programs/ld-collate.c:4098
+#: locale/programs/ld-collate.c:3957
#, c-format
msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
msgstr ""
-#: locale/programs/ld-ctype.c:440
+#: locale/programs/ld-ctype.c:481
#, c-format
msgid "No character set name specified in charmap"
msgstr ""
-#: locale/programs/ld-ctype.c:469
+#: locale/programs/ld-ctype.c:510
#, c-format
msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
msgstr ""
-#: locale/programs/ld-ctype.c:484
+#: locale/programs/ld-ctype.c:525
#, c-format
msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
msgstr ""
-#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556
+#: locale/programs/ld-ctype.c:539 locale/programs/ld-ctype.c:597
#, fuzzy, c-format
msgid "internal error in %s, line %u"
msgstr "interna napaka"
-#: locale/programs/ld-ctype.c:527
+#: locale/programs/ld-ctype.c:568
#, c-format
msgid "character '%s' in class `%s' must be in class `%s'"
msgstr ""
-#: locale/programs/ld-ctype.c:543
+#: locale/programs/ld-ctype.c:584
#, c-format
msgid "character '%s' in class `%s' must not be in class `%s'"
msgstr ""
-#: locale/programs/ld-ctype.c:573 locale/programs/ld-ctype.c:611
+#: locale/programs/ld-ctype.c:614 locale/programs/ld-ctype.c:652
#, fuzzy, c-format
msgid "<SP> character not in class `%s'"
msgstr "neveljavni razred znakov %s"
-#: locale/programs/ld-ctype.c:585 locale/programs/ld-ctype.c:622
+#: locale/programs/ld-ctype.c:626 locale/programs/ld-ctype.c:663
#, c-format
msgid "<SP> character must not be in class `%s'"
msgstr ""
-#: locale/programs/ld-ctype.c:600
+#: locale/programs/ld-ctype.c:641
#, fuzzy, c-format
msgid "character <SP> not defined in character map"
msgstr "razmejilni znak je dolg veÄ kot en bajt"
-#: locale/programs/ld-ctype.c:736
+#: locale/programs/ld-ctype.c:777
#, c-format
msgid "`digit' category has not entries in groups of ten"
msgstr ""
-#: locale/programs/ld-ctype.c:785
+#: locale/programs/ld-ctype.c:826
#, c-format
msgid "no input digits defined and none of the standard names in the charmap"
msgstr ""
-#: locale/programs/ld-ctype.c:850
+#: locale/programs/ld-ctype.c:891
#, c-format
msgid "not all characters used in `outdigit' are available in the charmap"
msgstr ""
-#: locale/programs/ld-ctype.c:867
+#: locale/programs/ld-ctype.c:908
#, c-format
msgid "not all characters used in `outdigit' are available in the repertoire"
msgstr ""
-#: locale/programs/ld-ctype.c:1270
+#: locale/programs/ld-ctype.c:1173
#, c-format
msgid "character class `%s' already defined"
msgstr ""
-#: locale/programs/ld-ctype.c:1276
+#: locale/programs/ld-ctype.c:1179
#, c-format
msgid "implementation limit: no more than %Zd character classes allowed"
msgstr ""
-#: locale/programs/ld-ctype.c:1302
+#: locale/programs/ld-ctype.c:1205
#, fuzzy, c-format
msgid "character map `%s' already defined"
msgstr "znakovna enota"
-#: locale/programs/ld-ctype.c:1308
+#: locale/programs/ld-ctype.c:1211
#, c-format
msgid "implementation limit: no more than %d character maps allowed"
msgstr ""
-#: locale/programs/ld-ctype.c:1573 locale/programs/ld-ctype.c:1698
-#: locale/programs/ld-ctype.c:1804 locale/programs/ld-ctype.c:2494
-#: locale/programs/ld-ctype.c:3490
+#: locale/programs/ld-ctype.c:1476 locale/programs/ld-ctype.c:1601
+#: locale/programs/ld-ctype.c:1707 locale/programs/ld-ctype.c:2397
+#: locale/programs/ld-ctype.c:3393
#, c-format
msgid "%s: field `%s' does not contain exactly ten entries"
msgstr ""
-#: locale/programs/ld-ctype.c:1601 locale/programs/ld-ctype.c:2175
+#: locale/programs/ld-ctype.c:1504 locale/programs/ld-ctype.c:2078
#, c-format
msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
msgstr ""
-#: locale/programs/ld-ctype.c:1728
+#: locale/programs/ld-ctype.c:1631
msgid "start and end character sequence of range must have the same length"
msgstr ""
-#: locale/programs/ld-ctype.c:1735
+#: locale/programs/ld-ctype.c:1638
msgid "to-value character sequence is smaller than from-value sequence"
msgstr ""
-#: locale/programs/ld-ctype.c:2095 locale/programs/ld-ctype.c:2146
+#: locale/programs/ld-ctype.c:1998 locale/programs/ld-ctype.c:2049
#, fuzzy
msgid "premature end of `translit_ignore' definition"
msgstr "PredÄasen zakljuÄek regularnega izraza"
-#: locale/programs/ld-ctype.c:2101 locale/programs/ld-ctype.c:2152
-#: locale/programs/ld-ctype.c:2194
+#: locale/programs/ld-ctype.c:2004 locale/programs/ld-ctype.c:2055
+#: locale/programs/ld-ctype.c:2097
msgid "syntax error"
msgstr "napaka v skladnji"
-#: locale/programs/ld-ctype.c:2327
+#: locale/programs/ld-ctype.c:2230
#, c-format
msgid "%s: syntax error in definition of new character class"
msgstr ""
-#: locale/programs/ld-ctype.c:2342
+#: locale/programs/ld-ctype.c:2245
#, c-format
msgid "%s: syntax error in definition of new character map"
msgstr ""
-#: locale/programs/ld-ctype.c:2516
+#: locale/programs/ld-ctype.c:2419
msgid "ellipsis range must be marked by two operands of same type"
msgstr ""
-#: locale/programs/ld-ctype.c:2525
+#: locale/programs/ld-ctype.c:2428
msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
msgstr ""
-#: locale/programs/ld-ctype.c:2540
+#: locale/programs/ld-ctype.c:2443
msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
msgstr ""
-#: locale/programs/ld-ctype.c:2554
+#: locale/programs/ld-ctype.c:2457
msgid "with character code range values one must use the absolute ellipsis `...'"
msgstr ""
-#: locale/programs/ld-ctype.c:2705
+#: locale/programs/ld-ctype.c:2608
#, fuzzy, c-format
msgid "duplicated definition for mapping `%s'"
msgstr "podvojena definicija sporoÄila"
-#: locale/programs/ld-ctype.c:2791 locale/programs/ld-ctype.c:2935
+#: locale/programs/ld-ctype.c:2694 locale/programs/ld-ctype.c:2838
#, c-format
msgid "%s: `translit_start' section does not end with `translit_end'"
msgstr ""
-#: locale/programs/ld-ctype.c:2886
+#: locale/programs/ld-ctype.c:2789
#, fuzzy, c-format
msgid "%s: duplicate `default_missing' definition"
msgstr "podvojena definicija sporoÄila"
-#: locale/programs/ld-ctype.c:2891
+#: locale/programs/ld-ctype.c:2794
msgid "previous definition was here"
msgstr ""
-#: locale/programs/ld-ctype.c:2913
+#: locale/programs/ld-ctype.c:2816
#, c-format
msgid "%s: no representable `default_missing' definition found"
msgstr ""
-#: locale/programs/ld-ctype.c:3066 locale/programs/ld-ctype.c:3150
-#: locale/programs/ld-ctype.c:3170 locale/programs/ld-ctype.c:3191
-#: locale/programs/ld-ctype.c:3212 locale/programs/ld-ctype.c:3233
-#: locale/programs/ld-ctype.c:3254 locale/programs/ld-ctype.c:3294
-#: locale/programs/ld-ctype.c:3315 locale/programs/ld-ctype.c:3382
-#: locale/programs/ld-ctype.c:3424 locale/programs/ld-ctype.c:3449
+#: locale/programs/ld-ctype.c:2969 locale/programs/ld-ctype.c:3053
+#: locale/programs/ld-ctype.c:3073 locale/programs/ld-ctype.c:3094
+#: locale/programs/ld-ctype.c:3115 locale/programs/ld-ctype.c:3136
+#: locale/programs/ld-ctype.c:3157 locale/programs/ld-ctype.c:3197
+#: locale/programs/ld-ctype.c:3218 locale/programs/ld-ctype.c:3285
+#: locale/programs/ld-ctype.c:3327 locale/programs/ld-ctype.c:3352
#, c-format
msgid "%s: character `%s' not defined while needed as default value"
msgstr ""
-#: locale/programs/ld-ctype.c:3071 locale/programs/ld-ctype.c:3155
-#: locale/programs/ld-ctype.c:3175 locale/programs/ld-ctype.c:3196
-#: locale/programs/ld-ctype.c:3217 locale/programs/ld-ctype.c:3238
-#: locale/programs/ld-ctype.c:3259 locale/programs/ld-ctype.c:3299
-#: locale/programs/ld-ctype.c:3320 locale/programs/ld-ctype.c:3387
+#: locale/programs/ld-ctype.c:2974 locale/programs/ld-ctype.c:3058
+#: locale/programs/ld-ctype.c:3078 locale/programs/ld-ctype.c:3099
+#: locale/programs/ld-ctype.c:3120 locale/programs/ld-ctype.c:3141
+#: locale/programs/ld-ctype.c:3162 locale/programs/ld-ctype.c:3202
+#: locale/programs/ld-ctype.c:3223 locale/programs/ld-ctype.c:3290
#, c-format
msgid "%s: character `%s' in charmap not representable with one byte"
msgstr ""
-#: locale/programs/ld-ctype.c:3431 locale/programs/ld-ctype.c:3456
+#: locale/programs/ld-ctype.c:3334 locale/programs/ld-ctype.c:3359
#, c-format
msgid "%s: character `%s' needed as default value not representable with one byte"
msgstr ""
-#: locale/programs/ld-ctype.c:3512
+#: locale/programs/ld-ctype.c:3415
#, c-format
msgid "no output digits defined and none of the standard names in the charmap"
msgstr ""
-#: locale/programs/ld-ctype.c:3803
+#: locale/programs/ld-ctype.c:3662
#, c-format
msgid "%s: transliteration data from locale `%s' not available"
msgstr ""
-#: locale/programs/ld-ctype.c:3904
+#: locale/programs/ld-ctype.c:3762
#, fuzzy, c-format
msgid "%s: table for class \"%s\": %lu bytes\n"
msgstr "%s: Zapisanih samo %lu od skupno %lu bajtov"
-#: locale/programs/ld-ctype.c:3973
+#: locale/programs/ld-ctype.c:3827
#, c-format
msgid "%s: table for map \"%s\": %lu bytes\n"
msgstr ""
-#: locale/programs/ld-ctype.c:4106
+#: locale/programs/ld-ctype.c:3956
#, c-format
msgid "%s: table for width: %lu bytes\n"
msgstr ""
@@ -2406,7 +2384,7 @@ msgstr ""
msgid "%s: no identification for category `%s'"
msgstr ""
-#: locale/programs/ld-identification.c:435
+#: locale/programs/ld-identification.c:351
#, fuzzy, c-format
msgid "%s: duplicate category version definition"
msgstr "podvojena definicija sporoÄila"
@@ -2447,22 +2425,22 @@ msgstr ""
msgid "%s: value for field `%s' must be in range %d...%d"
msgstr "vrednost %s od %s obseg %s..%s"
-#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:274
+#: locale/programs/ld-monetary.c:541 locale/programs/ld-numeric.c:229
#, fuzzy, c-format
msgid "%s: value for field `%s' must be a single character"
msgstr "%s: operand ekvivalentnih razredov sme biti en sam znak"
-#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:318
+#: locale/programs/ld-monetary.c:638 locale/programs/ld-numeric.c:273
#, c-format
msgid "%s: `-1' must be last entry in `%s' field"
msgstr ""
-#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:335
+#: locale/programs/ld-monetary.c:660 locale/programs/ld-numeric.c:290
#, c-format
msgid "%s: values for field `%s' must be smaller than 127"
msgstr ""
-#: locale/programs/ld-monetary.c:908
+#: locale/programs/ld-monetary.c:706
#, fuzzy
msgid "conversion rate value cannot be zero"
msgstr "Å¡tevilÄna izbira pri ukazu »s« mora biti neniÄelna"
@@ -2539,16 +2517,16 @@ msgstr ""
msgid "%s: values for field `%s' must not be larger than %d"
msgstr ""
-#: locale/programs/ld-time.c:1004
+#: locale/programs/ld-time.c:726
#, c-format
msgid "%s: too few values for field `%s'"
msgstr ""
-#: locale/programs/ld-time.c:1049
+#: locale/programs/ld-time.c:771
msgid "extra trailing semicolon"
msgstr ""
-#: locale/programs/ld-time.c:1052
+#: locale/programs/ld-time.c:774
#, fuzzy, c-format
msgid "%s: too many values for field `%s'"
msgstr "%s: preveÄ vrstic z nadzorno vsoto"
@@ -2665,114 +2643,122 @@ msgstr ""
msgid "while preparing output"
msgstr "med pripravo izpisa"
-#: locale/programs/localedef.c:119
+#: locale/programs/localedef.c:121
#, fuzzy
msgid "Input Files:"
msgstr "Skladnja vhodne datoteke:\n"
-#: locale/programs/localedef.c:121
+#: locale/programs/localedef.c:123
msgid "Symbolic character names defined in FILE"
msgstr ""
-#: locale/programs/localedef.c:123
+#: locale/programs/localedef.c:125
msgid "Source definitions are found in FILE"
msgstr ""
-#: locale/programs/localedef.c:125
+#: locale/programs/localedef.c:127
msgid "FILE contains mapping from symbolic names to UCS4 values"
msgstr ""
-#: locale/programs/localedef.c:129
+#: locale/programs/localedef.c:131
msgid "Create output even if warning messages were issued"
msgstr ""
-#: locale/programs/localedef.c:130
+#: locale/programs/localedef.c:132
msgid "Create old-style tables"
msgstr ""
-#: locale/programs/localedef.c:131
+#: locale/programs/localedef.c:133
#, fuzzy
msgid "Optional output file prefix"
msgstr "zapiramo izhodno datoteko %s"
-#: locale/programs/localedef.c:132
+#: locale/programs/localedef.c:134
msgid "Strictly conform to POSIX"
msgstr ""
-#: locale/programs/localedef.c:134
+#: locale/programs/localedef.c:136
msgid "Suppress warnings and information messages"
msgstr ""
-#: locale/programs/localedef.c:135
+#: locale/programs/localedef.c:137
msgid "Print more messages"
msgstr ""
-#: locale/programs/localedef.c:136
+#: locale/programs/localedef.c:138
#, fuzzy
msgid "Archive control:"
msgstr "Nadzor nad pisanjem prek:"
-#: locale/programs/localedef.c:138
+#: locale/programs/localedef.c:140
#, fuzzy
msgid "Don't add new data to archive"
msgstr "ustvarjanje novega arhiva"
-#: locale/programs/localedef.c:140
+#: locale/programs/localedef.c:142
msgid "Add locales named by parameters to archive"
msgstr ""
-#: locale/programs/localedef.c:141
+#: locale/programs/localedef.c:143
msgid "Replace existing archive content"
msgstr ""
-#: locale/programs/localedef.c:143
+#: locale/programs/localedef.c:145
msgid "Remove locales named by parameters from archive"
msgstr ""
-#: locale/programs/localedef.c:144
+#: locale/programs/localedef.c:146
#, fuzzy
msgid "List content of archive"
msgstr "izpiši vsebino arhiva"
-#: locale/programs/localedef.c:146
+#: locale/programs/localedef.c:148
#, fuzzy
msgid "locale.alias file to consult when making archive"
msgstr "pri arhiviranju izpusti datoteke na nelokalnih datoteÄnih sistemih"
-#: locale/programs/localedef.c:151
+#: locale/programs/localedef.c:150
+msgid "Generate little-endian output"
+msgstr ""
+
+#: locale/programs/localedef.c:152
+msgid "Generate big-endian output"
+msgstr ""
+
+#: locale/programs/localedef.c:157
#, fuzzy
msgid "Compile locale specification"
msgstr "%s zahteva doloÄitev \"-l locale\""
-#: locale/programs/localedef.c:154
+#: locale/programs/localedef.c:160
msgid ""
"NAME\n"
"[--add-to-archive|--delete-from-archive] FILE...\n"
"--list-archive [FILE]"
msgstr ""
-#: locale/programs/localedef.c:229
+#: locale/programs/localedef.c:235
#, fuzzy, c-format
msgid "cannot create directory for output files"
msgstr "imenika %s ni mogoÄe ustvariti"
-#: locale/programs/localedef.c:240
+#: locale/programs/localedef.c:246
#, c-format
msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
msgstr ""
-#: locale/programs/localedef.c:254 locale/programs/localedef.c:270
-#: locale/programs/localedef.c:602 locale/programs/localedef.c:622
+#: locale/programs/localedef.c:260 locale/programs/localedef.c:276
+#: locale/programs/localedef.c:614 locale/programs/localedef.c:634
#, fuzzy, c-format
msgid "cannot open locale definition file `%s'"
msgstr "Vhodne datoteke %s ni mogoÄe odpreti"
-#: locale/programs/localedef.c:282
+#: locale/programs/localedef.c:288
#, fuzzy, c-format
msgid "cannot write output files to `%s'"
msgstr "izhodne datoteke \"%s\" ni mogoÄe ustvariti"
-#: locale/programs/localedef.c:368
+#: locale/programs/localedef.c:380
#, c-format
msgid ""
"System's directory for character maps : %s\n"
@@ -2781,193 +2767,193 @@ msgid ""
"%s"
msgstr ""
-#: locale/programs/localedef.c:570
+#: locale/programs/localedef.c:582
#, c-format
msgid "circular dependencies between locale definitions"
msgstr ""
-#: locale/programs/localedef.c:576
+#: locale/programs/localedef.c:588
#, c-format
msgid "cannot add already read locale `%s' a second time"
msgstr ""
-#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:367
+#: locale/programs/locarchive.c:133 locale/programs/locarchive.c:380
#, fuzzy, c-format
msgid "cannot create temporary file: %s"
msgstr "zaÄasne datoteke v %s ni mogoÄe ustvariti"
-#: locale/programs/locarchive.c:155 locale/programs/locarchive.c:413
+#: locale/programs/locarchive.c:167 locale/programs/locarchive.c:430
#, fuzzy, c-format
msgid "cannot initialize archive file"
msgstr "Repozicija arhivske datoteke neuspešna"
-#: locale/programs/locarchive.c:162 locale/programs/locarchive.c:420
+#: locale/programs/locarchive.c:174 locale/programs/locarchive.c:437
#, fuzzy, c-format
msgid "cannot resize archive file"
msgstr "Repozicija arhivske datoteke neuspešna"
-#: locale/programs/locarchive.c:177 locale/programs/locarchive.c:435
-#: locale/programs/locarchive.c:645
+#: locale/programs/locarchive.c:189 locale/programs/locarchive.c:452
+#: locale/programs/locarchive.c:674
#, fuzzy, c-format
msgid "cannot map archive header"
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:199
+#: locale/programs/locarchive.c:211
#, fuzzy, c-format
msgid "failed to create new locale archive"
msgstr "nastavitev nove vloge %s ni uspela"
# Je to res v redu?
# ! INEXACT
-#: locale/programs/locarchive.c:211
+#: locale/programs/locarchive.c:223
#, fuzzy, c-format
msgid "cannot change mode of new locale archive"
msgstr "ni mogoÄe spremeniti na skupino niÄ"
-#: locale/programs/locarchive.c:311
+#: locale/programs/locarchive.c:324
#, fuzzy, c-format
msgid "cannot read data from locale archive"
msgstr "Prebrano samo %d zlogov z arhiva %s"
-#: locale/programs/locarchive.c:342
+#: locale/programs/locarchive.c:355
#, fuzzy, c-format
msgid "cannot map locale archive file"
msgstr "Repozicija arhivske datoteke neuspešna"
-#: locale/programs/locarchive.c:443
+#: locale/programs/locarchive.c:460
#, fuzzy, c-format
msgid "cannot lock new archive"
msgstr "ustvarjanje novega arhiva"
-#: locale/programs/locarchive.c:509
+#: locale/programs/locarchive.c:529
#, fuzzy, c-format
msgid "cannot extend locale archive file"
msgstr "Repozicija arhivske datoteke neuspešna"
-#: locale/programs/locarchive.c:518
+#: locale/programs/locarchive.c:538
#, fuzzy, c-format
msgid "cannot change mode of resized locale archive"
msgstr "Stisnjenega arhiva ni mogoÄe združevati"
-#: locale/programs/locarchive.c:526
+#: locale/programs/locarchive.c:546
#, fuzzy, c-format
msgid "cannot rename new archive"
msgstr "ustvarjanje novega arhiva"
-#: locale/programs/locarchive.c:579
+#: locale/programs/locarchive.c:608
#, fuzzy, c-format
msgid "cannot open locale archive \"%s\""
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:584
+#: locale/programs/locarchive.c:613
#, fuzzy, c-format
msgid "cannot stat locale archive \"%s\""
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:603
+#: locale/programs/locarchive.c:632
#, fuzzy, c-format
msgid "cannot lock locale archive \"%s\""
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:626
+#: locale/programs/locarchive.c:655
#, fuzzy, c-format
msgid "cannot read archive header"
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:697
+#: locale/programs/locarchive.c:728
#, c-format
msgid "locale '%s' already exists"
msgstr ""
-#: locale/programs/locarchive.c:959 locale/programs/locarchive.c:974
-#: locale/programs/locarchive.c:986 locale/programs/locarchive.c:998
-#: locale/programs/locfile.c:343
+#: locale/programs/locarchive.c:1003 locale/programs/locarchive.c:1018
+#: locale/programs/locarchive.c:1030 locale/programs/locarchive.c:1042
+#: locale/programs/locfile.c:350
#, fuzzy, c-format
msgid "cannot add to locale archive"
msgstr "Ni mogoÄe odpreti arhiva %s"
-#: locale/programs/locarchive.c:1156
+#: locale/programs/locarchive.c:1206
#, fuzzy, c-format
msgid "locale alias file `%s' not found"
msgstr "Datoteke z vzorcem datuma ni najti"
-#: locale/programs/locarchive.c:1306
+#: locale/programs/locarchive.c:1357
#, fuzzy, c-format
msgid "Adding %s\n"
msgstr "Branje %s\n"
-#: locale/programs/locarchive.c:1312
+#: locale/programs/locarchive.c:1363
#, c-format
msgid "stat of \"%s\" failed: %s: ignored"
msgstr ""
-#: locale/programs/locarchive.c:1318
+#: locale/programs/locarchive.c:1369
#, fuzzy, c-format
msgid "\"%s\" is no directory; ignored"
msgstr ",%s` ni imenik"
-#: locale/programs/locarchive.c:1325
+#: locale/programs/locarchive.c:1376
#, fuzzy, c-format
msgid "cannot open directory \"%s\": %s: ignored"
msgstr "imenika %s ni mogoÄe odpreti"
-#: locale/programs/locarchive.c:1397
+#: locale/programs/locarchive.c:1448
#, c-format
msgid "incomplete set of locale files in \"%s\""
msgstr ""
# POZOR!!! Razisci, kaj program res tu pocne!
# ! INEXACT
-#: locale/programs/locarchive.c:1461
+#: locale/programs/locarchive.c:1512
#, fuzzy, c-format
msgid "cannot read all files in \"%s\": ignored"
msgstr "ni mogoÄe prebrati imen datotek iz %s"
-#: locale/programs/locarchive.c:1531
+#: locale/programs/locarchive.c:1584
#, fuzzy, c-format
msgid "locale \"%s\" not in archive"
msgstr "%s: Ni najdeno v arhivu"
-#: locale/programs/locfile.c:131
+#: locale/programs/locfile.c:137
#, fuzzy, c-format
msgid "argument to `%s' must be a single character"
msgstr "argument %s mora biti eno samo loÄilo"
-#: locale/programs/locfile.c:251
+#: locale/programs/locfile.c:257
msgid "syntax error: not inside a locale definition section"
msgstr ""
-#: locale/programs/locfile.c:625
+#: locale/programs/locfile.c:800
#, fuzzy, c-format
msgid "cannot open output file `%s' for category `%s'"
msgstr "varnostne kopije %s ni mogoÄe odpreti za pisanje"
-#: locale/programs/locfile.c:649
+#: locale/programs/locfile.c:824
#, c-format
msgid "failure while writing data for category `%s'"
msgstr ""
-#: locale/programs/locfile.c:745
+#: locale/programs/locfile.c:920
#, fuzzy, c-format
msgid "cannot create output file `%s' for category `%s'"
msgstr "izhodne datoteke \"%s\" ni mogoÄe ustvariti"
-#: locale/programs/locfile.c:781
+#: locale/programs/locfile.c:956
#, fuzzy
msgid "expecting string argument for `copy'"
msgstr "manjkajoÄ argument k »%s«"
-#: locale/programs/locfile.c:785
+#: locale/programs/locfile.c:960
#, fuzzy
msgid "locale name should consist only of portable characters"
msgstr "datoteka vsebuje znak NUL"
-#: locale/programs/locfile.c:804
+#: locale/programs/locfile.c:979
#, fuzzy
msgid "no other keyword shall be specified when `copy' is used"
msgstr "tip ne sme biti doloÄen, kadar iznaÅ¡amo nize"
-#: locale/programs/locfile.c:818
+#: locale/programs/locfile.c:993
#, c-format
msgid "`%1$s' definition does not end with `END %1$s'"
msgstr ""
@@ -3015,23 +3001,23 @@ msgstr "preveÄ argumentov"
msgid "needs to be installed setuid `root'"
msgstr ""
-#: malloc/mcheck.c:347
+#: malloc/mcheck.c:346
msgid "memory is consistent, library is buggy\n"
msgstr ""
-#: malloc/mcheck.c:350
+#: malloc/mcheck.c:349
msgid "memory clobbered before allocated block\n"
msgstr ""
-#: malloc/mcheck.c:353
+#: malloc/mcheck.c:352
msgid "memory clobbered past end of allocated block\n"
msgstr ""
-#: malloc/mcheck.c:356
+#: malloc/mcheck.c:355
msgid "block freed twice\n"
msgstr ""
-#: malloc/mcheck.c:359
+#: malloc/mcheck.c:358
msgid "bogus mcheck_status, library is buggy\n"
msgstr ""
@@ -3800,12 +3786,12 @@ msgstr ""
msgid "yp_update: cannot get server address\n"
msgstr ""
-#: nscd/aicache.c:82 nscd/hstcache.c:494
+#: nscd/aicache.c:83 nscd/hstcache.c:494
#, c-format
msgid "Haven't found \"%s\" in hosts cache!"
msgstr ""
-#: nscd/aicache.c:84 nscd/hstcache.c:496
+#: nscd/aicache.c:85 nscd/hstcache.c:496
#, c-format
msgid "Reloading \"%s\" in hosts cache!"
msgstr ""
@@ -4057,7 +4043,7 @@ msgstr "pisanje ni uspelo"
msgid "setgroups failed"
msgstr "odpiranje ni uspelo"
-#: nscd/grpcache.c:413 nscd/hstcache.c:441 nscd/initgrcache.c:419
+#: nscd/grpcache.c:413 nscd/hstcache.c:441 nscd/initgrcache.c:418
#: nscd/pwdcache.c:391 nscd/servicescache.c:346
#, fuzzy, c-format
msgid "short write in %s: %s"
@@ -4088,22 +4074,22 @@ msgstr ""
msgid "no more memory for database '%s'"
msgstr ""
-#: nscd/netgroupcache.c:77
+#: nscd/netgroupcache.c:126
#, c-format
msgid "Haven't found \"%s\" in netgroup cache!"
msgstr ""
-#: nscd/netgroupcache.c:79
+#: nscd/netgroupcache.c:128
#, c-format
msgid "Reloading \"%s\" in netgroup cache!"
msgstr ""
-#: nscd/netgroupcache.c:475
+#: nscd/netgroupcache.c:509
#, c-format
msgid "Haven't found \"%s (%s,%s,%s)\" in netgroup cache!"
msgstr ""
-#: nscd/netgroupcache.c:478
+#: nscd/netgroupcache.c:512
#, c-format
msgid "Reloading \"%s (%s,%s,%s)\" in netgroup cache!"
msgstr ""
@@ -4156,7 +4142,7 @@ msgstr ""
msgid "Name Service Cache Daemon."
msgstr ""
-#: nscd/nscd.c:164 nss/getent.c:999 nss/makedb.c:206
+#: nscd/nscd.c:164 nss/getent.c:1003 nss/makedb.c:206
#, c-format
msgid "wrong number of arguments"
msgstr "napaÄno Å¡tevilo argumentov"
@@ -4216,6 +4202,18 @@ msgstr "pretvorba niza ni uspela"
msgid "secure services not implemented anymore"
msgstr ""
+#: nscd/nscd.c:462
+#, fuzzy, c-format
+msgid ""
+"Supported tables:\n"
+"%s\n"
+"\n"
+"For bug reporting instructions, please see:\n"
+"%s.\n"
+msgstr ""
+"Za navodila o prijavljanju napak prosim poglejte:\n"
+"%s.\n"
+
#: nscd/nscd_conf.c:57
#, fuzzy, c-format
msgid "database %s is not supported"
@@ -4496,16 +4494,16 @@ msgstr ""
msgid "Enumeration not supported on %s\n"
msgstr "Operacija ni podprta"
-#: nss/getent.c:913
+#: nss/getent.c:917
#, fuzzy, c-format
msgid "Unknown database name"
msgstr "Neznana format datuma"
-#: nss/getent.c:943
+#: nss/getent.c:947
msgid "Supported databases:\n"
msgstr ""
-#: nss/getent.c:1009
+#: nss/getent.c:1013
#, fuzzy, c-format
msgid "Unknown database: %s\n"
msgstr "Neznano ime signala: %s"
@@ -4965,7 +4963,7 @@ msgid "Child has terminated abnormally and did not create a core file"
msgstr ""
#: stdio-common/psiginfo-data.h:37
-msgid "Child hat terminated abnormally and created a core file"
+msgid "Child has terminated abnormally and created a core file"
msgstr ""
#: stdio-common/psiginfo-data.h:38
@@ -5490,7 +5488,22 @@ msgstr ""
msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n"
msgstr ""
+#: sunrpc/rpc_main.c:1445
+#, c-format
+msgid "-5\t\tSysVr4 compatibility mode\n"
+msgstr ""
+
#: sunrpc/rpc_main.c:1446
+#, fuzzy, c-format
+msgid "--help\t\tgive this help list\n"
+msgstr "Poda ta seznam pomoÄi"
+
+#: sunrpc/rpc_main.c:1447
+#, fuzzy, c-format
+msgid "--version\tprint program version\n"
+msgstr "Izpis izdaje programa"
+
+#: sunrpc/rpc_main.c:1449
#, c-format
msgid ""
"\n"
@@ -6810,73 +6823,74 @@ msgstr "ni mogoÄe odpreti »%s«"
msgid "cannot read header from `%s'"
msgstr "ni mogoÄe prebrati imen datotek iz %s"
-#: timezone/zdump.c:246
+#: timezone/zdump.c:280
msgid "lacks alphabetic at start"
msgstr ""
-#: timezone/zdump.c:248
+#: timezone/zdump.c:282
msgid "has fewer than 3 alphabetics"
msgstr ""
-#: timezone/zdump.c:250
+#: timezone/zdump.c:284
msgid "has more than 6 alphabetics"
msgstr ""
-#: timezone/zdump.c:258
+#: timezone/zdump.c:292
msgid "differs from POSIX standard"
msgstr "se razlikuje od standarda POSIX"
-#: timezone/zdump.c:264
+#: timezone/zdump.c:298
#, c-format
msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"
msgstr ""
-#: timezone/zdump.c:273
+#: timezone/zdump.c:307
#, c-format
msgid ""
-"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
+"%s: usage: %s [--version] [--help] [-{vV}] [-{ct} [lo,]hi] zonename ...\n"
"\n"
"Report bugs to %s.\n"
msgstr ""
-#: timezone/zdump.c:340
+#: timezone/zdump.c:384
#, fuzzy, c-format
msgid "%s: wild -c argument %s\n"
msgstr "neveljavni --%s argument %s"
-#: timezone/zdump.c:426
+#: timezone/zdump.c:417
+#, fuzzy, c-format
+msgid "%s: wild -t argument %s\n"
+msgstr "neveljavni --%s argument %s"
+
+#: timezone/zdump.c:506
msgid "Error writing to standard output"
msgstr "Napaka pri pisanju na standardni izhod"
-#: timezone/zdump.c:439
-#, c-format
-msgid "%s: use of -v on system with floating time_t other than float or double\n"
-msgstr ""
-
# #-#-#-#-# coreutils-8.22-pre3.sl.po (GNU coreutils 8.22-pre3) #-#-#-#-#
# ! INEXACT
# #-#-#-#-# gnulib-3.0.0.6062.a6b16.sl.po (gnulib 3.0.0.6062.a6b16) #-#-#-#-#
# ! INEXACT
-#: timezone/zic.c:361
+#: timezone/zic.c:370
#, c-format
msgid "%s: Memory exhausted: %s\n"
msgstr "%s: Pomnilnik porabljen: %s\n"
-#: timezone/zic.c:401
+#: timezone/zic.c:410
#, fuzzy, c-format
-msgid "\"%s\", line %d: %s"
+msgid "\"%s\", line %d: "
msgstr "%s: datoteka %s vrstica %lu: %s\n"
-#: timezone/zic.c:404
+#: timezone/zic.c:413
#, c-format
msgid " (rule from \"%s\", line %d)"
msgstr ""
-#: timezone/zic.c:415
+#: timezone/zic.c:432
+#, c-format
msgid "warning: "
msgstr "opozorilo: "
-#: timezone/zic.c:425
+#: timezone/zic.c:442
#, c-format
msgid ""
"%s: usage is %s [ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
@@ -6885,368 +6899,377 @@ msgid ""
"Report bugs to %s.\n"
msgstr ""
-#: timezone/zic.c:460
+#: timezone/zic.c:477
msgid "wild compilation-time specification of zic_t"
msgstr ""
-#: timezone/zic.c:479
+#: timezone/zic.c:496
#, fuzzy, c-format
msgid "%s: More than one -d option specified\n"
msgstr "nobena izbira za pretvorbo ni podana"
-#: timezone/zic.c:489
+#: timezone/zic.c:506
#, fuzzy, c-format
msgid "%s: More than one -l option specified\n"
msgstr "nobena izbira za pretvorbo ni podana"
-#: timezone/zic.c:499
+#: timezone/zic.c:516
#, fuzzy, c-format
msgid "%s: More than one -p option specified\n"
msgstr "nobena izbira za pretvorbo ni podana"
-#: timezone/zic.c:509
+#: timezone/zic.c:526
#, fuzzy, c-format
msgid "%s: More than one -y option specified\n"
msgstr "nobena izbira za pretvorbo ni podana"
-#: timezone/zic.c:519
+#: timezone/zic.c:536
#, fuzzy, c-format
msgid "%s: More than one -L option specified\n"
msgstr "nobena izbira za pretvorbo ni podana"
-#: timezone/zic.c:566
+#: timezone/zic.c:583
#, fuzzy
msgid "link to link"
msgstr " povezava na %s\n"
-#: timezone/zic.c:629
+#: timezone/zic.c:650
#, fuzzy
msgid "hard link failed, symbolic link used"
msgstr "ni mogoÄe prebrati simbolne povezave %s"
-#: timezone/zic.c:637
+#: timezone/zic.c:660
+#, fuzzy, c-format
+msgid "%s: Can't read %s: %s\n"
+msgstr "%s: ni mogoÄe ustvariti %s: %s\n"
+
+#: timezone/zic.c:668 timezone/zic.c:1533
+#, c-format
+msgid "%s: Can't create %s: %s\n"
+msgstr "%s: ni mogoÄe ustvariti %s: %s\n"
+
+#: timezone/zic.c:676 timezone/zic.c:881
#, fuzzy, c-format
-msgid "%s: Can't link from %s to %s: %s\n"
-msgstr "%s: Simbolna povezava na %s ni mogoÄa"
+msgid "%s: Error reading %s\n"
+msgstr "napaka pri branju %s"
+
+#: timezone/zic.c:682 timezone/zic.c:1750
+#, c-format
+msgid "%s: Error writing %s\n"
+msgstr "%s: napaka pri pisanju na %s\n"
+
+#: timezone/zic.c:686
+#, fuzzy
+msgid "link failed, copy used"
+msgstr "ni mogoÄe prebrati simbolne povezave %s"
-#: timezone/zic.c:697 timezone/zic.c:699
+#: timezone/zic.c:744 timezone/zic.c:746
#, fuzzy
msgid "same rule name in multiple files"
msgstr "kljuÄ %lu je Å¡tevilÄen in se razteza prek veÄ polj"
-#: timezone/zic.c:740
+#: timezone/zic.c:787
msgid "unruly zone"
msgstr ""
-#: timezone/zic.c:747
+#: timezone/zic.c:794
#, c-format
msgid "%s in ruleless zone"
msgstr ""
-#: timezone/zic.c:767
+#: timezone/zic.c:814
msgid "standard input"
msgstr "standardni vhod"
-#: timezone/zic.c:772
+#: timezone/zic.c:819
#, fuzzy, c-format
msgid "%s: Can't open %s: %s\n"
msgstr "%s: %s ni mogoÄe prebrati: %s\n"
-#: timezone/zic.c:783
+#: timezone/zic.c:830
#, fuzzy
msgid "line too long"
msgstr "vrstica z argumenti je predolga"
-#: timezone/zic.c:803
+#: timezone/zic.c:850
#, fuzzy
msgid "input line of unknown type"
msgstr "vhodna vrstica je predolga"
-#: timezone/zic.c:819
+#: timezone/zic.c:866
#, c-format
msgid "%s: Leap line in non leap seconds file %s\n"
msgstr ""
-#: timezone/zic.c:826 timezone/zic.c:1243 timezone/zic.c:1265
+#: timezone/zic.c:873 timezone/zic.c:1282 timezone/zic.c:1304
#, fuzzy, c-format
msgid "%s: panic: Invalid l_value %d\n"
msgstr "neveljavna vrednost polja %s"
-#: timezone/zic.c:834
-#, fuzzy, c-format
-msgid "%s: Error reading %s\n"
-msgstr "napaka pri branju %s"
-
-#: timezone/zic.c:841
+#: timezone/zic.c:888
#, fuzzy, c-format
msgid "%s: Error closing %s: %s\n"
msgstr "%s: Napaka pri zapiranju"
-#: timezone/zic.c:846
+#: timezone/zic.c:893
msgid "expected continuation line not found"
msgstr ""
-#: timezone/zic.c:887 timezone/zic.c:2413 timezone/zic.c:2427
+#: timezone/zic.c:934 timezone/zic.c:2610 timezone/zic.c:2624
#, fuzzy
msgid "time overflow"
msgstr "prekoraÄitev sklada"
-#: timezone/zic.c:891
+#: timezone/zic.c:938
msgid "24:00 not handled by pre-1998 versions of zic"
msgstr ""
-#: timezone/zic.c:894
+#: timezone/zic.c:941
msgid "values over 24 hours not handled by pre-2007 versions of zic"
msgstr ""
-#: timezone/zic.c:905
+#: timezone/zic.c:952
#, fuzzy
msgid "wrong number of fields on Rule line"
msgstr "neveljavno Å¡tevilo preskoÄenih polj"
-#: timezone/zic.c:909
+#: timezone/zic.c:956
msgid "nameless rule"
msgstr ""
-#: timezone/zic.c:914
+#: timezone/zic.c:961
#, fuzzy
msgid "invalid saved time"
msgstr "neveljavna specifikacija"
-#: timezone/zic.c:932
+#: timezone/zic.c:978
#, fuzzy
msgid "wrong number of fields on Zone line"
msgstr "neveljavno Å¡tevilo preskoÄenih polj"
-#: timezone/zic.c:938
+#: timezone/zic.c:983
#, fuzzy, c-format
msgid "\"Zone %s\" line and -l option are mutually exclusive"
msgstr ""
"\n"
"Izbiri -r in -s se medsebojno izkljuÄujeta.\n"
-#: timezone/zic.c:946
+#: timezone/zic.c:989
#, fuzzy, c-format
msgid "\"Zone %s\" line and -p option are mutually exclusive"
msgstr ""
"\n"
"Izbiri -r in -s se medsebojno izkljuÄujeta.\n"
-#: timezone/zic.c:958
+#: timezone/zic.c:997
#, c-format
msgid "duplicate zone name %s (file \"%s\", line %d)"
msgstr ""
-#: timezone/zic.c:972
+#: timezone/zic.c:1010
msgid "wrong number of fields on Zone continuation line"
msgstr ""
-#: timezone/zic.c:1009
+#: timezone/zic.c:1047
#, fuzzy
-msgid "invalid UTC offset"
+msgid "invalid UT offset"
msgstr "Neveljaven odmik pri seek"
-#: timezone/zic.c:1012
+#: timezone/zic.c:1050
#, fuzzy
msgid "invalid abbreviation format"
msgstr "neveljavna oblika datuma %s"
-#: timezone/zic.c:1041
+#: timezone/zic.c:1079
msgid "Zone continuation line end time is not after end time of previous line"
msgstr ""
-#: timezone/zic.c:1066
+#: timezone/zic.c:1105
#, fuzzy
msgid "wrong number of fields on Leap line"
msgstr "neveljavno Å¡tevilo preskoÄenih polj"
-#: timezone/zic.c:1075
+#: timezone/zic.c:1114
#, fuzzy
msgid "invalid leaping year"
msgstr "neveljavni padajoÄi razpon"
-#: timezone/zic.c:1095 timezone/zic.c:1197
+#: timezone/zic.c:1134 timezone/zic.c:1236
#, fuzzy
msgid "invalid month name"
msgstr "napaÄna zaÅ¡Äita"
-#: timezone/zic.c:1108 timezone/zic.c:1310 timezone/zic.c:1324
+#: timezone/zic.c:1147 timezone/zic.c:1349 timezone/zic.c:1363
#, fuzzy
msgid "invalid day of month"
msgstr "neveljavna oblika datuma %s"
-#: timezone/zic.c:1113
+#: timezone/zic.c:1152
#, fuzzy
msgid "time before zero"
msgstr "pred -le"
-#: timezone/zic.c:1117
+#: timezone/zic.c:1156
#, fuzzy
msgid "time too small"
msgstr "Medpomnilnik za argumente premajhen"
-#: timezone/zic.c:1121
+#: timezone/zic.c:1160
#, fuzzy
msgid "time too large"
msgstr "%s je preveliko"
-#: timezone/zic.c:1125 timezone/zic.c:1226
+#: timezone/zic.c:1164 timezone/zic.c:1265
#, fuzzy
msgid "invalid time of day"
msgstr "neveljavno Å¡tevilo bajtov"
-#: timezone/zic.c:1144
+#: timezone/zic.c:1183
msgid "illegal CORRECTION field on Leap line"
msgstr ""
-#: timezone/zic.c:1149
+#: timezone/zic.c:1188
msgid "illegal Rolling/Stationary field on Leap line"
msgstr ""
-#: timezone/zic.c:1163
+#: timezone/zic.c:1202
#, fuzzy
msgid "wrong number of fields on Link line"
msgstr "neveljavno Å¡tevilo preskoÄenih polj"
-#: timezone/zic.c:1167
+#: timezone/zic.c:1206
msgid "blank FROM field on Link line"
msgstr ""
-#: timezone/zic.c:1171
+#: timezone/zic.c:1210
msgid "blank TO field on Link line"
msgstr ""
-#: timezone/zic.c:1247
+#: timezone/zic.c:1286
#, fuzzy
msgid "invalid starting year"
msgstr "neveljavna zaÄetna Å¡tevilka vrstice: %s"
-#: timezone/zic.c:1269
+#: timezone/zic.c:1308
#, fuzzy
msgid "invalid ending year"
msgstr "neveljaven vrstni red bajtov: %s"
-#: timezone/zic.c:1273
+#: timezone/zic.c:1312
msgid "starting year greater than ending year"
msgstr ""
-#: timezone/zic.c:1280
+#: timezone/zic.c:1319
msgid "typed single year"
msgstr ""
-#: timezone/zic.c:1315
+#: timezone/zic.c:1354
#, fuzzy
msgid "invalid weekday name"
msgstr "neveljavni padajoÄi razpon"
-#: timezone/zic.c:1481
+#: timezone/zic.c:1523
#, c-format
msgid "%s: Can't remove %s: %s\n"
msgstr "%s: ni mogoÄe odstraniti %s: %s\n"
-#: timezone/zic.c:1491
-#, c-format
-msgid "%s: Can't create %s: %s\n"
-msgstr "%s: ni mogoÄe ustvariti %s: %s\n"
-
-#: timezone/zic.c:1683
-#, c-format
-msgid "%s: Error writing %s\n"
-msgstr "%s: napaka pri pisanju na %s\n"
-
-#: timezone/zic.c:1966
+#: timezone/zic.c:2105
#, fuzzy
msgid "no POSIX environment variable for zone"
msgstr "nastavitev spremenljivke okolja %s ni uspela"
-#: timezone/zic.c:2133
+#: timezone/zic.c:2111
+#, c-format
+msgid "%s: pre-%d clients may mishandle distant timestamps"
+msgstr ""
+
+#: timezone/zic.c:2292
msgid "can't determine time zone abbreviation to use just after until time"
msgstr ""
-#: timezone/zic.c:2177
+#: timezone/zic.c:2338 timezone/zic.c:2416
+#, fuzzy
+msgid "too many local time types"
+msgstr "preveÄ predlog"
+
+#: timezone/zic.c:2374
#, fuzzy
msgid "too many transitions?!"
msgstr "preveÄ vrstic na vhodu"
-#: timezone/zic.c:2192
+#: timezone/zic.c:2389
msgid "internal error - addtype called with bad isdst"
msgstr ""
-#: timezone/zic.c:2196
+#: timezone/zic.c:2393
msgid "internal error - addtype called with bad ttisstd"
msgstr ""
-#: timezone/zic.c:2200
+#: timezone/zic.c:2397
msgid "internal error - addtype called with bad ttisgmt"
msgstr ""
-#: timezone/zic.c:2219
+#: timezone/zic.c:2420
#, fuzzy
-msgid "too many local time types"
-msgstr "preveÄ predlog"
-
-#: timezone/zic.c:2223
-#, fuzzy
-msgid "UTC offset out of range"
+msgid "UT offset out of range"
msgstr "Odmik pri seek izven obsega"
-#: timezone/zic.c:2247
+#: timezone/zic.c:2444
#, fuzzy
msgid "too many leap seconds"
msgstr "preveÄ argumentov datoteke"
-#: timezone/zic.c:2253
+#: timezone/zic.c:2450
msgid "repeated leap second moment"
msgstr ""
-#: timezone/zic.c:2303
+#: timezone/zic.c:2500
msgid "Wild result from command execution"
msgstr ""
-#: timezone/zic.c:2304
+#: timezone/zic.c:2501
#, c-format
msgid "%s: command was '%s', result was %d\n"
msgstr ""
-#: timezone/zic.c:2395
+#: timezone/zic.c:2592
#, fuzzy
msgid "Odd number of quotation marks"
msgstr "neveljavno Å¡tevilo primerjanih bajtov"
-#: timezone/zic.c:2472
+#: timezone/zic.c:2669
msgid "use of 2/29 in non leap-year"
msgstr ""
-#: timezone/zic.c:2507
+#: timezone/zic.c:2704
msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic"
msgstr ""
-#: timezone/zic.c:2538
+#: timezone/zic.c:2735
msgid "time zone abbreviation lacks alphabetic at start"
msgstr ""
-#: timezone/zic.c:2540
+#: timezone/zic.c:2737
msgid "time zone abbreviation has fewer than 3 alphabetics"
msgstr ""
-#: timezone/zic.c:2542
+#: timezone/zic.c:2739
msgid "time zone abbreviation has too many alphabetics"
msgstr ""
-#: timezone/zic.c:2552
+#: timezone/zic.c:2749
msgid "time zone abbreviation differs from POSIX standard"
msgstr ""
-#: timezone/zic.c:2564
+#: timezone/zic.c:2755
msgid "too many, or too long, time zone abbreviations"
msgstr ""
-#: timezone/zic.c:2604
+#: timezone/zic.c:2795
#, fuzzy, c-format
msgid "%s: Can't create directory %s: %s\n"
msgstr "imenika %s ni mogoÄe ustvariti"
-#: timezone/zic.c:2625
-#, c-format
-msgid "%s: %d did not sign extend correctly\n"
-msgstr ""
+#, fuzzy
+#~ msgid "%s: Can't link from %s to %s: %s\n"
+#~ msgstr "%s: Simbolna povezava na %s ni mogoÄa"
diff --git a/libc/ports/ChangeLog.aarch64 b/libc/ports/ChangeLog.aarch64
index b801c7349..6d4ab4778 100644
--- a/libc/ports/ChangeLog.aarch64
+++ b/libc/ports/ChangeLog.aarch64
@@ -1,3 +1,7 @@
+2014-01-22 Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * sysdeps/aarch64/libm-test-ulps: Regenerated.
+
2014-01-20 Marcus Shawcroft <marcus.shawcroft@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/Makefile (abi-lp64_be-options): Fix
diff --git a/libc/ports/ChangeLog.alpha b/libc/ports/ChangeLog.alpha
index 24540e4db..92be2924d 100644
--- a/libc/ports/ChangeLog.alpha
+++ b/libc/ports/ChangeLog.alpha
@@ -1,3 +1,10 @@
+2014-01-24 Richard Henderson <rth@redhat.com>
+
+ * sysdeps/alpha/fpu/libm-test-ulps: Update.
+
+ * sysdeps/alpha/tls-macros.h (TLS_GD): Add dependency on $gp.
+ (TLS_LD, TLS_IE): Likewise.
+
2013-12-07 Richard Henderson <rth@redhat.com>
* sysdeps/unix/sysv/linux/alpha/bits/mman.h: Use <bits/mman-linux.h>,
diff --git a/libc/ports/ChangeLog.arm b/libc/ports/ChangeLog.arm
index 4371b3ccf..51bb76b99 100644
--- a/libc/ports/ChangeLog.arm
+++ b/libc/ports/ChangeLog.arm
@@ -1,3 +1,9 @@
+2014-01-24 Will Newton <will.newton@linaro.org>
+
+ [BZ #16499]
+ * sysdeps/unix/sysv/linux/arm/clone.S: Use BLX macro instead
+ of blx instruction directly.
+
2014-01-14 Will Newton <will.newton@linaro.org>
* sysdeps/arm/__longjmp.S: Don't apply pointer encryption
diff --git a/libc/ports/ChangeLog.hppa b/libc/ports/ChangeLog.hppa
index 98d36a3e1..24ae46e52 100644
--- a/libc/ports/ChangeLog.hppa
+++ b/libc/ports/ChangeLog.hppa
@@ -1,3 +1,7 @@
+2014-02-03 Carlos O'Donell <carlos@redhat.com>
+
+ * sysdeps/hppa/fpu/libm-test-ulps: Regenerate.
+
2013-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/hppa/fpu/fegetround.c (fegetround): Use libm_hidden_def.
diff --git a/libc/ports/ChangeLog.ia64 b/libc/ports/ChangeLog.ia64
index b5c5668a2..87c1426df 100644
--- a/libc/ports/ChangeLog.ia64
+++ b/libc/ports/ChangeLog.ia64
@@ -1,3 +1,8 @@
+2013-01-29 Siddhesh Poyarekar <siddhesh@redhat.com>
+
+ * sysdeps/unix/sysv/linux/ia64/setjmp.S: Remove spaces before
+ tabs.
+
2014-01-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/ia64/fpu/libm-test-ulps: Update after truncating.
diff --git a/libc/ports/ChangeLog.m68k b/libc/ports/ChangeLog.m68k
index d3e90b239..ee2bb4165 100644
--- a/libc/ports/ChangeLog.m68k
+++ b/libc/ports/ChangeLog.m68k
@@ -1,3 +1,7 @@
+2014-01-27 Andreas Schwab <schwab@linux-m68k.org>
+
+ * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Regenerate.
+
2013-12-10 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/m68k/m680x0/fpu/s_nextafterl.c (__nextafterl): Use
diff --git a/libc/ports/ChangeLog.microblaze b/libc/ports/ChangeLog.microblaze
index 7d47e0468..1c5bc996b 100644
--- a/libc/ports/ChangeLog.microblaze
+++ b/libc/ports/ChangeLog.microblaze
@@ -1,3 +1,13 @@
+2014-02-04 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * sysdeps/microblaze/libm-test-ulps: Update.
+ * sysdeps/microblaze/libm-test-ulps_new: Delete redundant file.
+
+2014-02-04 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * sysdeps/microblaze/fegetround.c: Delete redundant file.
+ * sysdeps/microblaze/fesetround.c: Likewise.
+
2013-11-28 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/fegetround.c (fegetround): Use
diff --git a/libc/ports/ChangeLog.tile b/libc/ports/ChangeLog.tile
index bf871234b..cb8d4d082 100644
--- a/libc/ports/ChangeLog.tile
+++ b/libc/ports/ChangeLog.tile
@@ -1,3 +1,7 @@
+2014-01-03 Chris Metcalf <cmetcalf@tilera.com>
+
+ * sysdeps/tile/libm-test-ulps: Regenerated.
+
2014-01-06 Mike Frysinger <vapier@gentoo.org>
* sysdeps/unix/sysv/linux/tile/sys/ptrace.h (ptrace_peeksiginfo_args):
diff --git a/libc/ports/sysdeps/aarch64/libm-test-ulps b/libc/ports/sysdeps/aarch64/libm-test-ulps
index 25afbe111..786720dbe 100644
--- a/libc/ports/sysdeps/aarch64/libm-test-ulps
+++ b/libc/ports/sysdeps/aarch64/libm-test-ulps
@@ -13401,22 +13401,9 @@ idouble: 1
Test "exp_upward (-0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-ildouble: 1
-ldouble: 1
-Test "exp_upward (-0xf.ffffffffffffbffffffffffffcp+1020)":
-ildouble: 1
-ldouble: 1
-Test "exp_upward (-0xf.fffffffffffffffffffffffffff8p+16380)":
-ildouble: 1
-ldouble: 1
-Test "exp_upward (-0xf.fffffffffffffffp+16380)":
-ildouble: 1
-ldouble: 1
Test "exp_upward (-0xf.fffffp+124)":
double: 1
idouble: 1
-ildouble: 1
-ldouble: 1
Test "exp_upward (0x1p+0)":
double: 1
idouble: 1
@@ -18595,8 +18582,6 @@ idouble: 1
Function: "exp_upward":
double: 1
idouble: 1
-ildouble: 1
-ldouble: 1
Function: "expm1":
double: 1
diff --git a/libc/ports/sysdeps/alpha/fpu/libm-test-ulps b/libc/ports/sysdeps/alpha/fpu/libm-test-ulps
index 991de8c0b..1a59c00bd 100644
--- a/libc/ports/sysdeps/alpha/fpu/libm-test-ulps
+++ b/libc/ports/sysdeps/alpha/fpu/libm-test-ulps
@@ -1,123 +1,548 @@
# Begin of automatic generation
# acos_downward
-Test "acos_downward (-0)":
+Test "acos_downward (-0x8p-4)":
float: 1
ifloat: 1
-Test "acos_downward (-0.5)":
+ildouble: 1
+ldouble: 1
+
+# acos_towardzero
+Test "acos_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# acos_upward
+Test "acos_upward (+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x1p+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-128)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x8p-972)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d496p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d497p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef56p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-128)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-972)":
+double: 1
+idouble: 1
+
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+Test "acosh (0xf.fffffp+124)":
+ldouble: 1
+
+# asin
+Test "asin (-0xf.ffffffffffff8p-4)":
+ildouble: 1
+ldouble: 1
+Test "asin (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_downward
+Test "asin_downward (-0x1p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0x8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffff8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.ffffffffffff8p-4)":
double: 1
idouble: 1
-Test "acos_downward (-1)":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffffffffp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "acos_downward (0)":
+Test "asin_downward (0x8p-4)":
float: 1
ifloat: 1
-Test "acos_downward (0.5)":
+Test "asin_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_tonearest
+Test "asin_tonearest (-0xf.ffffffffffff8p-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_towardzero
+Test "asin_towardzero (-0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-128)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# acos_towardzero
-Test "acos_towardzero (-0)":
+Test "asin_towardzero (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "acos_towardzero (-0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-972)":
double: 1
idouble: 1
-Test "acos_towardzero (-1)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0xf.fffffp-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (0x8p-4)":
float: 1
ifloat: 1
-Test "acos_towardzero (0)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_upward
+Test "asin_upward (-0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "acos_towardzero (0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x8p-152)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# acos_upward
-Test "acos_upward (-0)":
+Test "asin_upward (-0x8p-16448)":
ildouble: 1
ldouble: 1
-Test "acos_upward (-1)":
+Test "asin_upward (-0x8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "acos_upward (0)":
+Test "asin_upward (-0x8p-972)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# asin_downward
-Test "asin_downward (-0.5)":
+Test "asin_upward (-0xf.fffffff8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0xf.ffffffffffff8p-4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "asin_downward (-1.0)":
+Test "asin_upward (-0xf.fffffffffffffffp-4)":
ildouble: 1
ldouble: 1
-Test "asin_downward (0.5)":
+Test "asin_upward (-0xf.fffffffffffp-4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "asin_downward (1.0)":
+Test "asin_upward (-0xf.fffffp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# asin_towardzero
-Test "asin_towardzero (-0.5)":
+ildouble: 2
+ldouble: 2
+Test "asin_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "asin_upward (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-1076)":
double: 1
idouble: 1
-Test "asin_towardzero (-1.0)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "asin_towardzero (0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-152)":
double: 1
-idouble: 1
-Test "asin_towardzero (1.0)":
float: 1
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
-# asin_upward
-Test "asin_upward (-1.0)":
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (-0xf.fffffp+124)":
+ldouble: 1
+Test "asinh (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asinh (0x1p+100)":
+ildouble: 1
+ldouble: 1
+Test "asinh (0xap+0)":
float: 1
ifloat: 1
-Test "asin_upward (1.0)":
-ildouble: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xf.fffffp+124)":
ldouble: 1
# atan2
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036)":
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51244p-12)":
ildouble: 1
ldouble: 1
-Test "atan2 (-0.75, -1.0)":
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac291p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac291p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca4838p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca483cp-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1ep-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1ep-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca4838p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca483cp-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca4ap-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "atan2 (-max_value, -min_value)":
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe8p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe8p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x2p-16384, -0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x4p-16384, -0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x4p-16448, -0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x8p-16448, -0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xf.fffffffffffffffffffffffffff8p+16380, 0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
float: 1
ifloat: 1
-Test "atan2 (0.75, -1.0)":
+Test "atan2 (0x1.000002p+0, 0x1.0000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x1.000002p+0, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "atan2 (1.390625, 0.9296875)":
+Test "atan2 (0x4p-16384, -0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.301648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.30164ap-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x8p-16448, -0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0xcp-4, -0x1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "atan2 (0xf.fffffffffffffffp+16380, 0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
# atanh
-Test "atanh (0.75)":
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
+Test "atanh (0x1.2345p-20)":
+ildouble: 1
+ldouble: 1
+Test "atanh (0x4p-4)":
+ildouble: 1
+ldouble: 1
+Test "atanh (0xcp-4)":
float: 1
ifloat: 1
@@ -5872,415 +6297,2556 @@ float: 1
ifloat: 1
# cbrt
-Test "cbrt (-0.001)":
-ildouble: 1
-ldouble: 1
-Test "cbrt (-27.0)":
+Test "cbrt (-0x1.bp+4)":
double: 1
idouble: 1
-Test "cbrt (0.75)":
+Test "cbrt (-0x4.189374bc6a7ecp-12)":
+ildouble: 1
+ldouble: 1
+Test "cbrt (-0x4.189374bc6a7ef9ep-12)":
+ildouble: 1
+ldouble: 1
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cbrt (0xcp-4)":
double: 1
idouble: 1
-Test "cbrt (0.9921875)":
+Test "cbrt (0xf.ep-4)":
double: 1
idouble: 1
# ccos
-Test "Imaginary part of: ccos (-0.75 + 11357.25 i)":
+Test "Real part of: ccos (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 + 710.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-0.75 + 89.5 i)":
+Test "Real part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 + 89.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 11357.25 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 710.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
double: 1
idouble: 1
+Test "Real part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-0.75 - 89.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x1p-120 + 0x8p-32 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0x4p-16436 + 0x5.8cap+12 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (0x8p-32 + 0x1p-120 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 89.5 i)":
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x5.98p+4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2.c5d4p+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2.c5d4p+12 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
+double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 11357.25 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 + 710.5 i)":
+Test "Real part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c5d4p+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c5d4p+12 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 + 89.5 i)":
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x5.8cap+12 + 0x4p-16436 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 + 89.5 i)":
+Test "Real part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 11357.25 i)":
+Test "Real part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 710.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (+0 + 0x2.1e19e0c9bab24p+72 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (+0 + 0x2p+64 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (+0 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 - 89.5 i)":
+Test "Real part of: cexp (+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 89.5 i)":
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (-0x2.71p+12 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.dp+8 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)":
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (0x1p-16434 + 22730 i)":
+Test "Imaginary part of: cexp (0x1.f4p+8 + 0xf.fffffp+124 i)":
ildouble: 1
ldouble: 1
-
-# ccosh
-Test "Imaginary part of: ccosh (-11357.25 + 0.75 i)":
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-11357.25 - 0.75 i)":
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x5.8cap+12 + 0x4p-16436 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-2 - 3 i)":
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: cexp (0xcp-4 + 0x1.4p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-710.5 + 0.75 i)":
+
+# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-710.5 - 0.75 i)":
+Test "Real part of: clog (+0 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
double: 1
idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x4p-1076 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-1076 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16496 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16496 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-89.5 + 0.75 i)":
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-89.5 + 0.75 i)":
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (-0x8p-16448 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-89.5 - 0.75 i)":
+Test "Real part of: clog (-0x8p-16448 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-89.5 - 0.75 i)":
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (-0xf.8p+16380 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.23456789p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c63p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (11357.25 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed19ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (11357.25 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (22730 + 0x1p-16434 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bep-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (710.5 + 0.75 i)":
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (710.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bep-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (89.5 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (89.5 + 0.75 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (89.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (89.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1p-16440 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-
-# cexp
-Test "Imaginary part of: cexp (-10000 + 0x1p16383 i)":
+Test "Real part of: clog (0x1p-16440 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7b8p-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7b8p-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7bcp-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7bcp-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.2cdb84p-4 + 0xf.ae888f0455f6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae889p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.3b8f9p-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c59p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (-2.0 - 3.0 i)":
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c59p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3501173c8004ccp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d118p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d619a8d118p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d7p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-720 + 0.75 i)":
+Test "Imaginary part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d619a8d11bfdp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-95 + 0.75 i)":
+Test "Imaginary part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i)":
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d619a8d12p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (0.75 + 1.25 i)":
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)":
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005dcbb5516d5479p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (22730 + 0x1p-16434 i)":
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (50 + 0x1p127 i)":
-double: 2
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b3d1b06d005dcbb5516d5479p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
float: 1
-idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i)":
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (500 + 0x1p1023 i)":
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i)":
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209dep-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209dep-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d758p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bb1839d865fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d758p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i)":
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + +0 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i)":
-float: 2
-ifloat: 2
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Real part of: clog (0x4p-1076 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16496 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16496 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c58p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22364p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363bf989d9b5cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb14p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb14p-4 + 0xf.22364p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989d9b5cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.b06b680ea2ccp-4 + 0xe.f452b965da9fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.ba8cep-4 + 0xe.f0742p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.dbd1p-4 + 0xe.e387ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e21p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c4794p-4 + 0xe.d3e2086dcca8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)":
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)":
+Test "Imaginary part of: clog (0x6.02fd58p-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.02fd5p-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd125ef6f796a57d2p-4 + 0xe.c97c2018b428p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef6f796a57d2p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2018b428p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428257p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)":
+Test "Real part of: clog (0x6.1c643p-4 + 0xe.c97c2018b4288p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cb019p-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a599a86bbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86baf8febep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86baf9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86baf9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.59feap-4 + 0xe.af6f9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b48p-4 + 0xe.8893dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520217b6p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16445 i)":
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d384p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10d384p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d65p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16494 i)":
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d66p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16445 i)":
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b311p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16494 i)":
+Test "Real part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b31p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d8p-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8dp-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f4b083cb0bp-4 + 0xd.e1bf04f3688p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f4b088p-4 + 0xd.e1bfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f4b08p-4 + 0xd.e1bf04f3688p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.479468b09a37p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-16445 + 0x1.fp+16383 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16445 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-1076 + +0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16494 + 0x1.fp+16383 i)":
+Test "Real part of: clog (0x8p-1076 + 0x8p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16494 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0x8p-1076 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+Test "Real part of: clog (0x8p-152 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Real part of: clog (0x8p-152 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Real part of: clog (0x8p-152 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-16448 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)":
+Test "Real part of: clog (0x9.a9cp-4 + 0xc.c0ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b4085cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b408p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b969p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)":
+Test "Imaginary part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b57bp-4 + 0xc.b7b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53de1d5a7c8b1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8b0f6df3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8b0f6df3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1p-16445 i)":
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1p-16494 i)":
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53de1d5a7c8bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 - 0x1p-16445 i)":
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 - 0x1p-16494 i)":
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)":
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (0x1p-147 + 0x1p-147 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624348p-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc58p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0xa.b96da19075eap-8 + 0xf.fc67818f89d2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-16445 + 0x1.fp+16383 i)":
+Test "Imaginary part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16445 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.b96dbp-8 + 0xf.fc67818f89d2p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16494 + 0x1.fp+16383 i)":
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de8p-4 + 0xb.b51cb9f04d4dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16494 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)":
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51ccp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a043561d0f42p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x298c62cb546588a7p-63 + 0x7911b1dfcc4ecdaep-63 i)":
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x2ede88p-23 + 0x771c3fp-23 i)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f24p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x3f96469050f650869c2p-75 + 0x6f16b2c9c8b05988335p-75 i)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x55cb6d0c83af5p-55 + 0x7fe33c0c7c4e90p-55 i)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6059p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x659feap-24 + 0xeaf6f9p-24 i)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x6771f22c64ed551b857c128b4cp-105 + 0x1f570e7a13cc3cf2f44fd793ea1p-105 i)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)":
+Test "Real part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6059p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f24p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x9b57bp-20 + 0xcb7b4p-20 i)":
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xdb85c467ee2aadd5f425fe0f4b8dp-114 + 0x3e83162a0f95f1dcbf97dddf410eap-114 i)":
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xfd95243681c055c2632286921092p-113 + 0x1bccabcd29ca2152860ec29e34ef7p-113 i)":
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)":
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+16380 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 - 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.ffffffffffff8p+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.ffffffffffff8p-1004 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffffffffffffp-15004 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i)":
@@ -6658,209 +9224,1136 @@ idouble: 1
ifloat: 1
# cos
+Test "cos (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
Test "cos (0x1p+120)":
float: 1
ifloat: 1
-Test "cos (0x1p+127)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos (0x8p+124)":
float: 1
ifloat: 1
-Test "cos (M_PI_6l * 2.0)":
-double: 1
-idouble: 1
-Test "cos (M_PI_6l * 4.0)":
-double: 2
+Test "cos (0xap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xc.d4967p-4)":
float: 1
-idouble: 2
ifloat: 1
+Test "cos (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.fffffffffffffffp+16380)":
ildouble: 1
ldouble: 1
# cos_downward
-Test "cos_downward (1)":
+Test "cos_downward (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_downward (10)":
ildouble: 1
ldouble: 1
-Test "cos_downward (2)":
+Test "cos_downward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (3)":
+Test "cos_downward (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1.000004p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.000006p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c1522p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0c1524p+0)":
float: 1
ifloat: 1
+Test "cos_downward (0x1.921fb4p+0)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1.921fb54442d18468p+0)":
ildouble: 1
ldouble: 1
-Test "cos_downward (4)":
+Test "cos_downward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb6p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_downward (5)":
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "cos_downward (0x1p+120)":
+float: 2
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "cos_downward (6)":
+Test "cos_downward (0x1p+28)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (7)":
+Test "cos_downward (0x2.182a44p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "cos_downward (0x2.182a4705ae6cap+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eacf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eadp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb09p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a48p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x3p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_downward (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-1076)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (8)":
+Test "cos_downward (0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p+0)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
+Test "cos_downward (0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xa.217bap+12)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "cos_downward (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.fffffffffffffffp+16380)":
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
# cos_tonearest
-Test "cos_tonearest (7)":
+Test "cos_tonearest (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xc.d4967p-4)":
float: 1
ifloat: 1
+Test "cos_tonearest (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
# cos_towardzero
-Test "cos_towardzero (10)":
+Test "cos_towardzero (-0x2p-16384)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (2)":
+Test "cos_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (3)":
+Test "cos_towardzero (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (5)":
+Test "cos_towardzero (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+120)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "cos_towardzero (0x2.182a44p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x2.182a4705ae6cap+0)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (6)":
+Test "cos_towardzero (0x2.182a4705ae6cb08cb7665c1eacp+0)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (7)":
+Test "cos_towardzero (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.182a48p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (8)":
+Test "cos_towardzero (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xa.217bap+12)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
# cos_upward
-Test "cos_upward (1)":
+Test "cos_upward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.000002p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1.000004p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.000005bc7d86dp+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.000006p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.0c1522p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.0c152382d7366p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.0c1524p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.921fb4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x1.921fb6p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_upward (10)":
+Test "cos_upward (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a44p+0)":
float: 1
ifloat: 1
-Test "cos_upward (4)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cap+0)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacp+0)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eadp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb09p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cos_upward (6)":
+Test "cos_upward (0x2.182a48p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_upward (7)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.1e19e4p+72)":
float: 1
ifloat: 1
-Test "cos_upward (9)":
+Test "cos_upward (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (0x3p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x6p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x7p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x8p+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x9p+0)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-
-# cosh_downward
-Test "cosh_downward (22)":
+Test "cos_upward (0xa.217bap+12)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0xap+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_downward (23)":
+Test "cos_upward (0xc.d4966p-4)":
+float: 1
+ifloat: 1
+Test "cos_upward (0xc.d4967p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "cos_upward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "cos_upward (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "cosh_downward (24)":
+Test "cos_upward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+
+# cosh
+Test "cosh (-0x1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# cosh_tonearest
-Test "cosh_tonearest (22)":
+Test "cosh (-0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x1.6p+4)":
ildouble: 1
ldouble: 1
+Test "cosh (0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
-# cosh_towardzero
-Test "cosh_towardzero (22)":
+# cosh_downward
+Test "cosh_downward (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_downward (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x5.96a7ep+4)":
float: 1
ifloat: 1
+Test "cosh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cosh_towardzero (23)":
+Test "cosh_downward (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_downward (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x5.96a7ep+4)":
float: 1
ifloat: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x1.6p+4)":
ildouble: 1
ldouble: 1
-Test "cosh_towardzero (24)":
+Test "cosh_tonearest (0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x5.96a7ep+4)":
float: 1
ifloat: 1
+Test "cosh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
+Test "cosh_towardzero (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_towardzero (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x5.96a7ep+4)":
+float: 1
+ifloat: 1
# cosh_upward
-Test "cosh_upward (22)":
+Test "cosh_upward (-0x1p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_upward (23)":
+Test "cosh_upward (-0x2.c5d374p+12)":
+ldouble: 3
+Test "cosh_upward (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 2
+Test "cosh_upward (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "cosh_upward (0x1.6p+4)":
ildouble: 1
ldouble: 1
-Test "cosh_upward (24)":
+Test "cosh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
+Test "cosh_upward (0x2.c5d374p+12)":
+ldouble: 3
+Test "cosh_upward (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 2
+Test "cosh_upward (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x3.2p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
-ildouble: 1
-ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
+Test "Real part of: cpow (0x2p+0 + +0 i, 0xap+0 + +0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-ildouble: 4
-ldouble: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + +0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
double: 2
float: 3
idouble: 2
ifloat: 3
ildouble: 2
ldouble: 2
-Test "Real part of: cpow (2 + 0 i, 10 + 0 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 2
-ifloat: 2
+ildouble: 4
+ldouble: 4
# csin
Test "Real part of: csin (-0.75 + 11357.25 i)":
@@ -7025,881 +10518,4279 @@ ildouble: 1
ldouble: 1
# csqrt
-Test "Real part of: csqrt (-0x1.0000000000000000000000000001p-16382 - 0x1.0000000000000000000000000001p-16382 i)":
+Test "Imaginary part of: csqrt (-0 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000000000000000004p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000000000000000004p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i)":
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000004p-1024 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (-0x4.0000000000004p-1024 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
double: 1
idouble: 1
-Test "Real part of: csqrt (-2 + 3 i)":
-float: 1
-ifloat: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-2 - 3 i)":
-float: 1
-ifloat: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0.75 + 1.25 i)":
+Test "Real part of: csqrt (-0x8p-152 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000000000000000000001p-16382 + 0x1.0000000000000000000000000001p-16382 i)":
+Test "Real part of: csqrt (-0x8p-152 - 0x4.0000000000004p-1024 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-5000 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4.0000000000000000000000000004p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i)":
+Test "Real part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000004p-1024 + 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16448 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16496 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)":
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)":
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i)":
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i)":
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-16448 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.8p+16380 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
# ctan
-Test "Real part of: ctan (-2 - 3 i)":
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan (-2 - 3 i)":
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0.75 + 1.25 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + +0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x2.dp+4 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x1p1023 + 1 i)":
+Test "Real part of: ctan (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0x1p1023 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+1020 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x1p127 + 1 i)":
+Test "Real part of: ctan (0x8p+124 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan (0x1p127 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0x1p16383 + 1 i)":
+Test "Real part of: ctan (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0x1p16383 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+16380 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
-float: 1
-ifloat: 1
+Test "Real part of: ctan (0xcp-4 + 0x1.4p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (1 + 355 i)":
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (1 + 365 i)":
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (1 + 45 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: ctan (1 + 47 i)":
+Test "Real part of: ctan (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
# ctan_downward
-Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
ildouble: 4
ldouble: 4
-Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + +0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+double: 6
+idouble: 6
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-ildouble: 5
-ldouble: 5
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 5
+float: 5
+idouble: 5
+ifloat: 5
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_tonearest
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + +0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-152 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.dp+4 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+16380 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
# ctan_towardzero
-Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 5
ldouble: 5
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+double: 5
+idouble: 5
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_upward
-Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Imaginary part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 + 0xc.35p+12 i)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + +0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63ap+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+ildouble: 2
+ldouble: 2
# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (-2 - 3 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)":
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
float: 1
ifloat: 1
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x1.63p+8 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
+Test "Real part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+124 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh (0.75 + 1.25 i)":
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
float: 2
ifloat: 2
-Test "Real part of: ctanh (1 + 0x1p1023 i)":
+
+# ctanh_downward
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d18p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb6p+0 i)":
double: 1
idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (1 + 0x1p127 i)":
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 4
+float: 1
+idouble: 4
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh (1 + 0x1p16383 i)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
+double: 6
+idouble: 6
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (1 + 0x1p16383 i)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (355 + 1 i)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (365 + 1 i)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 5
+float: 5
+idouble: 5
+ifloat: 5
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (45 + 1 i)":
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb4p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (47 + 1 i)":
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_downward
-Test "Real part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
ildouble: 4
ldouble: 4
-Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 5
ldouble: 5
-Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1.63p+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_downward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x1.6dp+8 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
ildouble: 2
ldouble: 2
-
-# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
# ctanh_towardzero
-Test "Real part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+double: 5
+idouble: 5
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
ildouble: 5
ldouble: 5
-Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctanh_towardzero (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
# ctanh_upward
-Test "Real part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
-ildouble: 3
-ldouble: 3
-Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb6p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdap-4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63ap+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63p+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 2
+idouble: 2
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb6p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Real part of: ctanh_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
ildouble: 1
ldouble: 1
# erf
-Test "erf (1.25)":
+Test "erf (-0x7.ffffffffffffcp-4)":
+ildouble: 1
+ldouble: 1
+Test "erf (0x1.4p+0)":
double: 1
idouble: 1
# erfc
-Test "erfc (0x1.f7303cp+1)":
+Test "erfc (-0x8p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.ap+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x2p+0)":
double: 1
idouble: 1
-Test "erfc (0x1.ffa002p+2)":
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x6.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x6.a8p+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fe8008p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "erfc (0x1.ffffc8p+2)":
+Test "erfc (0x7.fffd6p+0)":
+float: 1
+ifloat: 1
+Test "erfc (0x7.ffff2p+0)":
ildouble: 1
ldouble: 1
-Test "erfc (2.0)":
+
+# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
double: 1
idouble: 1
-Test "erfc (27.0)":
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x1.348e45573a1dd72cp+8)":
ildouble: 1
ldouble: 1
-Test "erfc (4.125)":
+Test "exp10 (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
double: 1
idouble: 1
-# exp10
-Test "exp10 (-1)":
+# exp10_downward
+Test "exp10_downward (-0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (-0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (-0x1p+0)":
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e44p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e45573a1ddp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e45573a1dep+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x2.4p+4)":
double: 1
idouble: 1
-Test "exp10 (-305)":
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
double: 1
idouble: 1
-Test "exp10 (-36)":
+Test "exp10_tonearest (-0x1p+0)":
double: 1
idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x1.348e45573a1dd72cp+8)":
ildouble: 1
ldouble: 1
-Test "exp10 (3)":
+Test "exp10_tonearest (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
double: 1
idouble: 1
-Test "exp10 (36)":
+Test "exp10_tonearest (0x3p+0)":
double: 1
idouble: 1
-Test "exp10 (4932)":
+
+# exp10_towardzero
+Test "exp10_towardzero (-0x1.31p+8)":
ildouble: 1
ldouble: 1
-
-# exp2
-Test "exp2 (100.5)":
+Test "exp10_towardzero (-0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (-0x1p+0)":
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e44p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e45573a1ddp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e45573a1dep+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0xcp-4)":
ildouble: 1
ldouble: 1
-# exp_downward
-Test "exp_downward (2)":
-float: 1
-ifloat: 1
+# exp10_upward
+Test "exp10_upward (-0x1.31p+8)":
ildouble: 1
ldouble: 1
-Test "exp_downward (3)":
+Test "exp10_upward (-0x1.344p+12)":
+float: 1
+ifloat: 1
+Test "exp10_upward (-0x1.86ap+16)":
float: 1
ifloat: 1
+Test "exp10_upward (-0x2.4p+4)":
ildouble: 1
ldouble: 1
-
-# exp_towardzero
-Test "exp_towardzero (2)":
+Test "exp10_upward (-0xf.424p+16)":
+float: 1
+ifloat: 1
+Test "exp10_upward (-0xf.fffffp+124)":
float: 1
ifloat: 1
+Test "exp10_upward (0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (0x1.344p+12)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e44p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (0x1.348e45573a1dd72cp+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e45573a1ddp+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e45573a1dep+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (0x1.348e46p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x2.4p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "exp_towardzero (3)":
+Test "exp10_upward (0x3p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0xcp-4)":
+ildouble: 2
+ldouble: 2
+
+# exp2
+Test "exp2 (0x6.48p+4)":
ildouble: 1
ldouble: 1
+# exp_downward
+Test "exp_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_downward (0xcp-4)":
+double: 1
+idouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+
# exp_upward
-Test "exp_upward (1)":
+Test "exp_upward (-0x2.e870a4p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88c2p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a8p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe224p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe227861639p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe228p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x4.d2p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "exp_upward (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "exp_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "exp_upward (0x2.c5cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (0x3.2p+4)":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (-0x1p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x2.6p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x2.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x4.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x8p-32)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "expm1 (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_downward
+Test "expm1_downward (-0x1.1p+4)":
ildouble: 1
ldouble: 1
-
-# expm1
-Test "expm1 (-79.0)":
+Test "expm1_downward (-0x1p-100)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x1p-32)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.dp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x4.bp+4)":
ildouble: 1
ldouble: 1
-Test "expm1 (0.75)":
+Test "expm1_downward (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (0x1.f4p+8)":
double: 1
idouble: 1
-Test "expm1 (1)":
+Test "expm1_downward (0x3.2p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "expm1_downward (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (-0x1p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x2.6p+4)":
ildouble: 1
ldouble: 1
-Test "expm1 (500.0)":
+Test "expm1_tonearest (-0x2.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x4.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x8p-32)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
double: 1
idouble: 1
-# gamma
-Test "gamma (-0.5)":
+# expm1_towardzero
+Test "expm1_towardzero (-0x1.1p+4)":
ildouble: 1
ldouble: 1
-Test "gamma (0.7)":
+Test "expm1_towardzero (-0x1p-100)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (1.2)":
+Test "expm1_towardzero (-0x1p-32)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x1p-64)":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x2.dp+4)":
ildouble: 1
ldouble: 1
+Test "expm1_towardzero (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_towardzero (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (0x7.fp+4)":
+double: 1
+idouble: 1
-# hypot
-Test "hypot (-0.7, -12.4)":
+# expm1_upward
+Test "expm1_upward (-0x1.1p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x1p-100)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-0.7, 12.4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x1p-32)":
float: 1
ifloat: 1
-Test "hypot (-12.4, -0.7)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x1p-64)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-12.4, 0.7)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.dp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4p-52)":
float: 1
ifloat: 1
-Test "hypot (0.7, -12.4)":
+Test "expm1_upward (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (0x1p-100)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (0.7, 12.4)":
+Test "expm1_upward (0x1p-32)":
float: 1
ifloat: 1
-Test "hypot (12.4, -0.7)":
+Test "expm1_upward (0x1p-64)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (12.4, 0.7)":
+Test "expm1_upward (0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x7.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (0x8p-32)":
float: 1
ifloat: 1
-# j0
-Test "j0 (-0x1.001000001p+593)":
+# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x1p-40)":
ildouble: 1
ldouble: 1
-Test "j0 (-4.0)":
+Test "gamma (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (0.75)":
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x4p-32)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-28)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1.3333333333333332p+0)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1.3333333333333333333333333333p+0)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1p-60)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x4p-12)":
float: 1
ifloat: 1
-Test "j0 (0x1.d7ce3ap+107)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "j0 (0x1p1023)":
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "gamma (0x4p-72)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x8p-8)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.3333333333338p-4)":
ildouble: 1
ldouble: 1
-Test "j0 (0x1p16383)":
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0xb.3333333333333333333333333338p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333338p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333333333333333p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333333333333333p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333333333333333333333334p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333333333333333333333334p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333334p-4, -0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333334p-4, 0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666666666666666666668p+0, -0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666666666666666666668p+0, 0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666p+0, -0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666p+0, 0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666667p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666667p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdef0123456789ab8p-500, 0x1.23456789abcdep-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdef02p-500, 0x1.23456789abcdfp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdefp-500, 0x1.23456789abcdfp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdep-500, 0x1.23456789abcdef0123456789ab8p-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdfp-500, 0x1.23456789abcdef02p-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdfp-500, 0x1.23456789abcdefp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333338p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333338p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333333333333333p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333333333333333p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333333333333333333333334p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333333333333333333333334p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333334p-4, -0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333334p-4, 0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666666666666666666668p+0, -0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666666666666666666668p+0, 0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666p+0, -0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666p+0, 0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666667p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666667p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.66667p+0, -0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, -0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, -0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+
+# j0
+Test "j0 (-0x2.002000002p+592)":
ildouble: 2
ldouble: 2
-Test "j0 (10.0)":
-double: 2
+Test "j0 (-0x4p+0)":
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 2
ldouble: 2
-Test "j0 (2.0)":
+Test "j0 (0x2p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "j0 (4.0)":
+Test "j0 (0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (8.0)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x4p+16380)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x8p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# j1
-Test "j1 (-1.0)":
+Test "j0 (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0.75)":
+Test "j0 (0x8p+16380)":
+ildouble: 2
+ldouble: 2
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "j0 (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1.3ffp+74)":
+Test "j0 (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+# j1
+Test "j1 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "j1 (0x1.ff00000000002p+840)":
+Test "j1 (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "j1 (0x1p1023)":
+Test "j1 (0x4p+16380)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1p16382)":
+Test "j1 (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "j1 (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1p16383)":
+Test "j1 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "j1 (1.0)":
-ildouble: 1
-ldouble: 1
-Test "j1 (10.0)":
+Test "j1 (0xap+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "j1 (2.0)":
+Test "j1 (0xcp-4)":
+ildouble: 1
+ldouble: 1
+Test "j1 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "j1 (8.0)":
+Test "j1 (0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
-ildouble: 4
-ldouble: 4
+ifloat: 1
# jn
-Test "jn (0, -4.0)":
+Test "jn (0, -0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 0.75)":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (0, 2.0)":
+ildouble: 1
+ldouble: 1
+Test "jn (0, 0x2p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "jn (0, 4.0)":
+Test "jn (0, 0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 8.0)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (1, -1.0)":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 0.75)":
ildouble: 1
ldouble: 1
-Test "jn (1, 1.0)":
+Test "jn (0, 0x8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (1, 2.0)":
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 0x2p+0)":
double: 1
idouble: 1
-Test "jn (1, 8.0)":
+Test "jn (1, 0x8p+0)":
double: 1
idouble: 1
ildouble: 4
ldouble: 4
-Test "jn (10, -1.0)":
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (1, 0xcp-4)":
ildouble: 1
ldouble: 1
-Test "jn (10, 0.125)":
+Test "jn (10, -0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 0.75)":
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (10, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 1.0)":
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 10.0)":
-double: 4
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (2, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
float: 3
-idouble: 4
+idouble: 1
ifloat: 3
-ildouble: 2
-ldouble: 2
-Test "jn (10, 2.0)":
+Test "jn (2, 0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x8p+124)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-Test "jn (2, 0x1.ffff62p+99)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x8p+16380)":
+ildouble: 2
+ldouble: 2
+Test "jn (2, 0xf.fffb1p+96)":
double: 2
float: 2
idouble: 2
ifloat: 2
-Test "jn (2, 2.4048255576957729)":
+Test "jn (2, 0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.fffffp+124)":
double: 2
-float: 1
+float: 2
idouble: 2
-ifloat: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
ildouble: 1
ldouble: 1
-Test "jn (3, 0.125)":
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 5
+ldouble: 5
+Test "jn (3, 0x2.67a2a5d2e36801p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
double: 1
-float: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2p+0)":
+float: 1
ifloat: 1
-Test "jn (3, 0.75)":
+Test "jn (3, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 10.0)":
+Test "jn (3, 0xap+0)":
double: 3
-float: 1
idouble: 3
-ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (3, 2.0)":
+Test "jn (3, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (4, 0x2.67a2a4p+0)":
float: 1
ifloat: 1
-Test "jn (3, 2.4048255576957729)":
-double: 3
-idouble: 3
ildouble: 1
ldouble: 1
-Test "jn (4, 2.4048255576957729)":
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (4, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "jn (5, 2.4048255576957729)":
-double: 3
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
float: 1
-idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a4p+0)":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (6, 2.4048255576957729)":
+Test "jn (5, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (5, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (5, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a5d2e36801p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 5
+ldouble: 5
+Test "jn (6, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
double: 4
-float: 3
idouble: 4
+ildouble: 3
+ldouble: 3
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
ifloat: 3
-ildouble: 5
-ldouble: 5
-Test "jn (7, 2.4048255576957729)":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (7, 0x2.67a2a5d2e36800fcp+0)":
ildouble: 3
ldouble: 3
-Test "jn (8, 2.4048255576957729)":
+Test "jn (7, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (7, 0x2.67a2a5d2e3682p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
double: 3
-float: 2
idouble: 3
+ildouble: 2
+ldouble: 2
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
+float: 2
+idouble: 2
ifloat: 2
-ildouble: 8
-ldouble: 8
-Test "jn (9, 2.4048255576957729)":
+ildouble: 2
+ldouble: 2
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36801p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+ildouble: 4
+ldouble: 4
+Test "jn (9, 0x2.67a2a4p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
ildouble: 3
ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (9, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 7
+ldouble: 7
+Test "jn (9, 0x2.67a2a5d2e36801p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+ildouble: 3
+ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
# lgamma
-Test "lgamma (-0.5)":
+Test "lgamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "lgamma (-0x1p-40)":
ildouble: 1
ldouble: 1
-Test "lgamma (0.7)":
+Test "lgamma (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "lgamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "lgamma (-0x4p-32)":
ildouble: 1
ldouble: 1
-Test "lgamma (1.2)":
+Test "lgamma (-0x8p-28)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x8p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x8p-8)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1.3333333333333332p+0)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1.3333333333333333333333333333p+0)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1p-60)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x4p-12)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x4p-32)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x4p-72)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x8p-8)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# log
+Test "log (0x2.b7e151628aed2a68p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e151628aed2a6abf7158809cf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e151628aed2p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
+Test "log (0x4p-1076)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "log (0x8p-152)":
ildouble: 1
ldouble: 1
# log10
-Test "log10 (0.75)":
+Test "log10 (0x1.999998p-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x1.999999999999ap-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x1.99999ap-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x2.b7e151628aed2a6cp+0)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "log10 (0x4p-1024)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0xcp-4)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "log10 (e)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
# log1p
-Test "log1p (-0.25)":
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e151628aed2p+0)":
+ildouble: 1
+ldouble: 1
+Test "log1p (0x1.b7e15p+0)":
float: 1
ifloat: 1
# log2
-Test "log2 (0.75)":
+Test "log2 (0x2.b7e151628aed2a6cp+0)":
+ildouble: 1
+ldouble: 1
+Test "log2 (0xcp-4)":
ildouble: 1
ldouble: 1
# pow
-Test "pow (0x0.fffffffffffff8p0, -0x1.23456789abcdfp62)":
+Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde02468acf1357p+124)":
ildouble: 1
ldouble: 1
-Test "pow (0x0.ffffffp0, -0x1p24)":
-float: 1
-ifloat: 1
+Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde04p+124)":
ildouble: 1
ldouble: 1
-Test "pow (0x0.ffffffp0, 0x1p24)":
-float: 1
-ifloat: 1
-Test "pow (0x1.000002p0, 0x1p24)":
+Test "pow (0x1.0000000000001p+0, -0x2.468adp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
-Test "pow (10.0, -4930.0)":
+Test "pow (0xap+0, -0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow (0xap+0, 0x1.341p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4929.0)":
+Test "pow (0xap+0, 0x1.342p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4930.0)":
+Test "pow (0xap+0, 0x1.343p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4931.0)":
+Test "pow (0xap+0, 0x1.344p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4932.0)":
+Test "pow (0xd.72cb2a95c7ef6cce81bf1e825ba8p+16380, 0xcp-4)":
ildouble: 1
ldouble: 1
-Test "pow (1e4932, 0.75)":
+Test "pow (0xf.ffffffffffff8p-4, -0x4.8d159e26af37cp+60)":
ildouble: 1
ldouble: 1
+Test "pow (0xf.fffffffffffffffffffffffffff8p-4, -0x4.8d1598p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
# pow10
-Test "pow10 (-1)":
+Test "pow10 (-0x1.31p+8)":
double: 1
idouble: 1
-Test "pow10 (-305)":
+Test "pow10 (-0x1p+0)":
double: 1
idouble: 1
-Test "pow10 (-36)":
+Test "pow10 (-0x2.4p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "pow10 (3)":
+Test "pow10 (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x2.4p+4)":
double: 1
idouble: 1
-Test "pow10 (36)":
+Test "pow10 (0x3p+0)":
double: 1
idouble: 1
-Test "pow10 (4932)":
-ildouble: 1
-ldouble: 1
# pow_downward
Test "pow_downward (1.5, 1.03125)":
float: 1
ifloat: 1
+# pow_tonearest
+Test "pow_tonearest (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde02468acf1357p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde04p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.0000000000001p+0, -0x2.468adp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xap+0, -0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.341p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.343p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xd.72cb2a95c7ef6cce81bf1e825ba8p+16380, 0xcp-4)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.ffffffffffff8p-4, -0x4.8d159e26af37cp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffffffffffffffffffffffff8p-4, -0x4.8d1598p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
# pow_towardzero
Test "pow_towardzero (1.5, 1.03125)":
float: 1
@@ -7912,898 +14803,2504 @@ ifloat: 1
ildouble: 1
ldouble: 1
+# sin
+Test "sin (-0x1.921fb4p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x1p+0)":
+float: 1
+ifloat: 1
+Test "sin (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.be736p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d08p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x5.fbec78p+0)":
+ildouble: 1
+ldouble: 1
+
# sin_downward
-Test "sin_downward (10)":
+Test "sin_downward (-0x1.921fb4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb6p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707ab4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707abp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c23p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c24p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a92p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1p+120)":
+float: 1
+ifloat: 1
+Test "sin_downward (0x1p+28)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.1e19e4p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.1e19ep+72)":
+float: 2
+ifloat: 2
+Test "sin_downward (0x2.553534p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.be735c19be9fep+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9ffffcp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffeap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be736p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a0000000000000072p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a0004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a2p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032ap+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2ap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.093385688a2d1508p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.093385688a2d4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f70800000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f7084p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f708p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237ep+0)":
float: 1
ifloat: 1
-Test "sin_downward (2)":
ildouble: 1
ldouble: 1
-Test "sin_downward (3)":
+Test "sin_downward (0x4.c92d08p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (4)":
+Test "sin_downward (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf00008p+0)":
ildouble: 1
ldouble: 1
-Test "sin_downward (5)":
+Test "sin_downward (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (6)":
+Test "sin_downward (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec7477d4a8000000000000009cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7477d4a84p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7477d4a8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec78p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_downward (8)":
ildouble: 1
ldouble: 1
-Test "sin_downward (9)":
+Test "sin_downward (0x6p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_downward (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
# sin_tonearest
-Test "sin_tonearest (1)":
+Test "sin_tonearest (-0x1.921fb4p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x1p+0)":
float: 1
ifloat: 1
-Test "sin_tonearest (3)":
+Test "sin_tonearest (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.be736p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d08p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x5.fbec78p+0)":
ildouble: 1
ldouble: 1
# sin_towardzero
-Test "sin_towardzero (1)":
+Test "sin_towardzero (-0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x8.60a91c16b9b2c232dd99707ab3d8p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x8.60a91p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1p+0)":
float: 1
ifloat: 1
-Test "sin_towardzero (10)":
+Test "sin_towardzero (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.1e19ep+72)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_towardzero (2)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (3)":
+Test "sin_towardzero (0x2.553534p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "sin_towardzero (4)":
+Test "sin_towardzero (0x3.be735cp+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "sin_towardzero (0x3.ec2a0250032a000000000000007p+0)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (5)":
+Test "sin_towardzero (0x3.ec2a04p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "sin_towardzero (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.093385688a2d1508p-4)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (8)":
+Test "sin_towardzero (0x4.093385688a2d4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237e153f7084p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.1237e8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237ep+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf0000000000000008cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a80000000000000098p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a800000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a80008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x9p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xap+0)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (9)":
+Test "sin_towardzero (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xe.ef3afp-4)":
float: 1
ifloat: 1
+Test "sin_towardzero (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0xf.ffffffffffffbffffffffffffcp+1020)":
ildouble: 1
ldouble: 1
# sin_upward
-Test "sin_upward (1)":
+Test "sin_upward (-0x1.921fb4p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_upward (10)":
+Test "sin_upward (-0x1.921fb54442d18468p+0)":
ildouble: 1
ldouble: 1
-Test "sin_upward (2)":
-float: 2
-ifloat: 2
-Test "sin_upward (3)":
+Test "sin_upward (-0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "sin_upward (4)":
+Test "sin_upward (-0x1.921fb6p+0)":
float: 1
ifloat: 1
-Test "sin_upward (6)":
ildouble: 1
ldouble: 1
-Test "sin_upward (7)":
+Test "sin_upward (-0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab3d8p-4)":
+ildouble: 3
+ldouble: 3
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707abp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c23p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c24p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b3p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91p-4)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (-0x8.60a92p-4)":
ildouble: 1
ldouble: 1
-Test "sin_upward (9)":
+Test "sin_upward (0x1.921fb4p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1.921fb6p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+120)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# sincos
-Test "sincos (0x1p+120) extra output 2":
+Test "sin_upward (0x1p+28)":
float: 1
ifloat: 1
-Test "sincos (0x1p+127) extra output 2":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x2.1e19ep+72)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 1":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x2.5535376715b9ep+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2.553538p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fep+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9ffffcp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffeap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x3.be735cp+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be736p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a0000000000000072p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a000000000000007p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a0004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a04p+0)":
double: 1
+float: 1
idouble: 1
-Test "sincos (pi/6) extra output 2":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# sinh_downward
-Test "sinh_downward (22)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x4.093385688a2d4p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.093385688a2dp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.09338p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f70800000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f7084p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x4.1237e153f708p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237ep+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_downward (23)":
+Test "sin_upward (0x4.c92d08p+0)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf0000000000000008cp+0)":
ildouble: 2
ldouble: 2
-Test "sinh_downward (24)":
+Test "sin_upward (0x4.c92d0ffa4bf000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# sinh_towardzero
-Test "sinh_towardzero (22)":
+Test "sin_upward (0x4p+0)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4p+48)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_towardzero (23)":
+Test "sin_upward (0x5.fbec7477d4a80000000000000098p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a8000000000000009cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7477d4a800000000000002p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a80008p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7477d4a8p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec78p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x6p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x7p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "sin_upward (0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a92p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x8p+124)":
+double: 1
+idouble: 1
+Test "sin_upward (0x9p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0xap+0)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xc.d4967p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xcp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8008p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3afp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3bp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xf.ffffcp+124)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0xf.ffffffffffff8p+1020)":
ildouble: 2
ldouble: 2
-Test "sinh_towardzero (24)":
+Test "sin_upward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0xf.fffffp+124)":
+ildouble: 1
+ldouble: 1
+
+# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
float: 1
ifloat: 1
+Test "sincos (0x1.921fb54442d1846ap+0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1.921fb54442d18p+0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1p+120) extra output 2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1p+28) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x2.1e19e0c9bab24p+72) extra output 1":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x2p+64) extra output 1":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x8.60a92p-4) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0x8p+124) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0xc.d4967p-4) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0xf.ffffffffffff8p+1020) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0xf.ffffffffffffbffffffffffffcp+1020) extra output 2":
+ildouble: 1
+ldouble: 1
+
+# sinh_downward
+Test "sinh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0x1.8p+4)":
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_towardzero (0xcp-4)":
+ildouble: 1
+ldouble: 1
# sinh_upward
-Test "sinh_upward (22)":
+Test "sinh_upward (0x1.7p+4)":
ildouble: 1
ldouble: 1
-Test "sinh_upward (23)":
+Test "sinh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
+Test "sinh_upward (0x8p-32)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# tan
+Test "tan (-0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fdp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fp-4)":
ildouble: 1
ldouble: 1
-Test "sinh_upward (24)":
+Test "tan (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan (0x6p+0)":
ildouble: 1
ldouble: 1
# tan_downward
-Test "tan_downward (1)":
+Test "tan_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.908p-4)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.90cp-4)":
float: 1
ifloat: 1
+Test "tan_downward (-0xc.90ep-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (10)":
+Test "tan_downward (-0xc.90f8p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_downward (2)":
+Test "tan_downward (-0xc.90fcp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fd8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdap-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdbp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdp-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (6)":
+Test "tan_downward (-0xc.90fep-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_downward (8)":
+Test "tan_downward (-0xc.90fp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (9)":
+Test "tan_downward (-0xc.91p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# tan_towardzero
-Test "tan_towardzero (10)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.92p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.98p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.9p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_towardzero (3)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.ap-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x1p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2.1e19ep+72)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x4p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (4)":
+Test "tan_downward (0x6p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.908p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "tan_downward (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdbp-4)":
ildouble: 1
ldouble: 1
-Test "tan_towardzero (5)":
+Test "tan_downward (0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fep-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.91p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.92p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (6)":
+Test "tan_downward (0xc.94p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.98p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (9)":
+Test "tan_downward (0xc.ap-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "tan_downward (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xf.fffffp+124)":
+ildouble: 1
+ldouble: 1
+
+# tan_tonearest
+Test "tan_tonearest (-0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (-0xc.90fdp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (-0xc.90fp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (0x6p+0)":
+ildouble: 1
+ldouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (-0xc.90cp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90f8p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fcp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fd8p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fdap-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.91p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.98p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.ap-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
# tan_upward
-Test "tan_upward (1)":
+Test "tan_upward (-0xc.908p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (-0xc.90cp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_upward (10)":
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90ep-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (2)":
+Test "tan_upward (-0xc.90f8p-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fd8p-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fdap-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fdbp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdcp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (3)":
+Test "tan_upward (-0xc.90fep-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fp-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (4)":
+Test "tan_upward (-0xc.91p-4)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (5)":
+Test "tan_upward (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (-0xc.98p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (-0xc.9p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (6)":
+Test "tan_upward (-0xc.ap-4)":
ildouble: 1
ldouble: 1
-Test "tan_upward (9)":
+Test "tan_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_upward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# tanh
-Test "tanh (-0.75)":
+Test "tan_upward (0x2p+64)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (-1.0)":
+Test "tan_upward (0x4p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (0.75)":
+Test "tan_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0x7p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x8p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (1.0)":
+Test "tan_upward (0x9p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (0xc.908p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xc.90ep-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90f8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fd8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdap-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdbp-4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# tgamma
-Test "tgamma (-0.5)":
+Test "tan_upward (0xc.90fdcp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.90fep-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.90fp-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.91p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.92p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x0.fffffffffffff8p0)":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.94p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.98p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.9p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.ap-4)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x0.ffffffffffffffffffffffffffff8p0)":
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x0.ffffffp0)":
+Test "tan_upward (0xcp-4)":
float: 1
ifloat: 1
+Test "tan_upward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_upward (0xf.fffffp+124)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.0000000000000002p0)":
+
+# tanh
+Test "tanh (-0x1p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.0000000000001p0)":
+Test "tanh (-0xcp-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.000002p0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x1.0a32a2p+5)":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x1.5800000080001p+7)":
+Test "tanh (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "tanh (0xcp-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.fffffffffffffffep0)":
+
+# tgamma
+Test "tgamma (-0x1.0000000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.fffffffffffffp0)":
+Test "tgamma (-0x1.0000000000001p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffep0)":
+Test "tgamma (-0x1.000002p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x1.3ffffep+4)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffffep0)":
+Test "tgamma (-0x1.3ffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.fffffffffffffffffffffffff8p0)":
+Test "tgamma (-0x1.3fffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffp0)":
+Test "tgamma (-0x1.3ffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x14.000000000000000000000000001p0)":
+Test "tgamma (-0x1.4000000000000000000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x14.000000000001p0)":
+Test "tgamma (-0x1.4000000000001p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x14.00002p0)":
+Test "tgamma (-0x1.400002p+4)":
float: 1
ifloat: 1
ildouble: 4
ldouble: 4
-Test "tgamma (-0x1d.ffffep0)":
+Test "tgamma (-0x1.dffffep+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.fffffffffffffffffffffffff8p0)":
+Test "tgamma (-0x1.dfffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.ffffffffffffp0)":
+Test "tgamma (-0x1.dffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000000000000000000001p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x1e.00000000000000000000000008p0)":
+Test "tgamma (-0x1.e000000000000000000000000001p+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0x1.e00000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000000002p0)":
+Test "tgamma (-0x1.e000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000001p0)":
+Test "tgamma (-0x1.e000000000001p+4)":
double: 3
idouble: 3
-Test "tgamma (-0x1e.00002p0)":
+Test "tgamma (-0x1.e00002p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x1.f3ffffffffffffffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1f3.ffffffffffffffffffffffffffp0)":
+Test "tgamma (-0x1.f3ffffffffffffffffffffffffffp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1p-24)":
+Test "tgamma (-0x1.f3fffffffffffp+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x1.f40000000000000000000000008p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000000000000000000002p0)":
+Test "tgamma (-0x1.f40002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000002p0)":
-double: 1
-idouble: 1
+Test "tgamma (-0x1.fffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.000004p0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+Test "tgamma (-0x1.fffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.0000000000000000000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.fffffcp0)":
+Test "tgamma (-0x2.00000000000000000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.0000000000002p+0)":
double: 1
-float: 1
idouble: 1
+Test "tgamma (-0x2.000004p+0)":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
-Test "tgamma (-0x2.ffffffffffffep0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.fffffffffffep0)":
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffffffffffffcp0)":
+Test "tgamma (-0x2.7ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.7ffffffffffffffffffffffffffep+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x27.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.7fffffffffffffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.0000000000000000000000001p0)":
+Test "tgamma (-0x2.8000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.000000000002p0)":
+Test "tgamma (-0x2.80000000000000000000000001p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.8000000000002p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.00004p0)":
+Test "tgamma (-0x2.800004p+4)":
double: 2
idouble: 2
ildouble: 2
ldouble: 2
-Test "tgamma (-0x28.ffffffffffffffcp0)":
+Test "tgamma (-0x2.8fffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.8ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.8ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.000000000000000000000000002p0)":
+Test "tgamma (-0x2.8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (-0x2.9000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.0000000000000000000000001p0)":
+Test "tgamma (-0x2.90000000000000000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x29.00004p0)":
+Test "tgamma (-0x2.900004p+4)":
double: 1
idouble: 1
-Test "tgamma (-0x29.ffffcp0)":
+Test "tgamma (-0x2.9ffffcp+4)":
double: 1
idouble: 1
-Test "tgamma (-0x29.fffffffffffep0)":
+Test "tgamma (-0x2.9fffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.ffffffffffffffcp0)":
+Test "tgamma (-0x2.9ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.9ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.9fffffffffffffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000000000000000000002p0)":
+Test "tgamma (-0x2.a000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.0000000000000000000000001p0)":
+Test "tgamma (-0x2.a000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000000004p0)":
+Test "tgamma (-0x2.a000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000002p0)":
+Test "tgamma (-0x2.a00004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2ed.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.edfffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2ee.00000000000004p0)":
+Test "tgamma (-0x2.edffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.00000000000000000000000001p0)":
+Test "tgamma (-0x2.edfffffffffffffffffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.000004p0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "tgamma (-0x3.fffffcp0)":
+Test "tgamma (-0x2.ee00000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.ee00000000000004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x2.ee00000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.ee0004p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.fffffcp+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x3.ffffffffffffep0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x3.fffffffffffffffcp0)":
+Test "tgamma (-0x2.ffffffffffffep+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.fffffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.fffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.00000000000000000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x3.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "tgamma (-0x31.fffffffffffep0)":
+Test "tgamma (-0x3.1fffffffffffep+4)":
double: 3
idouble: 3
ildouble: 2
ldouble: 2
-Test "tgamma (-0x31.ffffffffffffffcp0)":
+Test "tgamma (-0x3.1ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x31.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.1ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x31.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x3.1fffffffffffffffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x32.000000000000000000000000002p0)":
+Test "tgamma (-0x3.2000000000000000000000000002p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x3.2000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x32.0000000000000000000000001p0)":
+Test "tgamma (-0x3.200004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x32.000000000000004p0)":
+Test "tgamma (-0x3.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e7.fffffffffffffcp0)":
+Test "tgamma (-0x3.e7fffffffffffffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e7.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.e7fffffffffffffffffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e8.00000000000000000000000002p0)":
+Test "tgamma (-0x3.e7ffffffffffffffffffffffffp+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e800000000000000000000000002p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e8000000000000000000000001p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e800000000000004p+8)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x3e8.00000000000004p0)":
+Test "tgamma (-0x3.e800000000002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.0000000000004p0)":
+Test "tgamma (-0x3.e80004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.ffffffffffffep+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.000008p0)":
+Test "tgamma (-0x3.fffffffffffffffffffffffffffep+0)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x4.000008p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffff8p0)":
+Test "tgamma (-0x4.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x4.ffffffffffffcp0)":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e1fffffffffffffffffffffffep+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e2000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e200000000000008p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e200000000004p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e20008p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x4.fffff8p+0)":
double: 1
idouble: 1
+Test "tgamma (-0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x4.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x4.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x4.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.0000000000000008p0)":
+Test "tgamma (-0x5.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.0000000000004p0)":
+Test "tgamma (-0x5.0000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.000008p0)":
+Test "tgamma (-0x5.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x5.fffff8p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x5.ffffffffffffcp0)":
+Test "tgamma (-0x5.8p+0)":
double: 1
idouble: 1
+Test "tgamma (-0x5.dbfffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.fffffffffffffff8p0)":
+Test "tgamma (-0x5.dbfffffffffffffffffffffffffcp+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x5.dc00000000000000000000000004p+8)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x5.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x5.dc000000000000000000000002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x5.dc00000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5db.fffffffffffff8p0)":
+Test "tgamma (-0x5.dc0008p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5db.fffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x5.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5dc.00000000000000000000000004p0)":
+Test "tgamma (-0x5.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x5.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x6.0000000000000000000000000004p0)":
+Test "tgamma (-0x5.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.00000000000000000000000002p0)":
+Test "tgamma (-0x5.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.0000000000004p0)":
+Test "tgamma (-0x6.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.000008p0)":
+Test "tgamma (-0x6.00000000000000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.000008p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "tgamma (-0x6.fffff8p0)":
+Test "tgamma (-0x6.3ffff8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.3fffffffffffcp+4)":
double: 2
-float: 1
idouble: 2
+Test "tgamma (-0x6.3ffffffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.3ffffffffffffffffffffffffep+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.4000000000000000000000000004p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.40000000000000000000000002p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.8p+0)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.ffffffffffffcp0)":
-double: 4
-idouble: 4
+Test "tgamma (-0x6.d5fff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.fffffffffffffff8p0)":
+Test "tgamma (-0x6.d5ffffffffffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x6.d5fffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x63.fffffffffffcp0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x63.ffffffffffffff8p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x63.ffffffffffffffffffffffffep0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x64.000000000000000000000000004p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x64.0000000000000000000000002p0)":
+Test "tgamma (-0x6.d5fffffffffffffffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x64.000000000004p0)":
-double: 1
-idouble: 1
+Test "tgamma (-0x6.d600000000000000000000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6d5.fffffffffffff8p0)":
+Test "tgamma (-0x6.d6000000000000000000000002p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.d600000000000008p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.d600000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6d6.00000000000000000000000004p0)":
+Test "tgamma (-0x6.e2fffffffffffffffffffffffep+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.e300000000000000000000000004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.e3000000000000000000000002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e3.00000000000000000000000004p0)":
+Test "tgamma (-0x6.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (-0x6.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x7.0000000000000008p0)":
+Test "tgamma (-0x6.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.0000000000004p0)":
+Test "tgamma (-0x7.0000000000000008p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x7.0000000000004p+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.000008p0)":
+Test "tgamma (-0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x7.fffff8p0)":
+Test "tgamma (-0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x7.fffff8p+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "tgamma (-0x7.ffffffffffffcp0)":
+Test "tgamma (-0x7.ffffffffffffcp+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.fffffffffffffff8p0)":
+Test "tgamma (-0x7.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x7.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x7.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.0000000000000000000000000008p0)":
+Test "tgamma (-0x8.0000000000000000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.00000000000000000000000004p0)":
+Test "tgamma (-0x8.00000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.0000000000008p0)":
+Test "tgamma (-0x8.0000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.00001p0)":
+Test "tgamma (-0x8.00001p+0)":
double: 2
idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (-0x9.ffffffffffff8p0)":
+Test "tgamma (-0x8.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x9.fffffffffffffffffffffffffff8p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x9.fffffp0)":
+ifloat: 1
+Test "tgamma (-0x8p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (-0x95.ffffffffffffffp0)":
+Test "tgamma (-0x9.5ffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.000000000000000000000000008p0)":
+Test "tgamma (-0x9.5ffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.0000000000000000000000004p0)":
+Test "tgamma (-0x9.60000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.00000000000001p0)":
+Test "tgamma (-0x9.600000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x96.000000000008p0)":
+Test "tgamma (-0x9.6000000000008p+4)":
double: 1
idouble: 1
-Test "tgamma (-0xa.0000000000008p0)":
+Test "tgamma (-0x9.60001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x9.ffffffffffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.fffffffffffffffffffffffffff8p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0xa.00001p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xa.c000000400008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xa.00001p0)":
+Test "tgamma (-0xa.c0001p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb4.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.4ffffffffffffffffffffffffcp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.4ffffffffffffffffffffffffff8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.4ffffffffffffffp+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.50000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb4.ffffffffffffffp0)":
+Test "tgamma (-0xb.500000000000001p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.5000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.0000000000000000000000004p0)":
+Test "tgamma (-0xb.5ffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.00000000000001p0)":
+Test "tgamma (-0xb.5ffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb5.000000000008p0)":
+Test "tgamma (-0xb.60000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.600000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.00000000000001p0)":
+Test "tgamma (-0xb.6000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.000000000008p0)":
+Test "tgamma (-0xb.6fffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.fffffffffff8p0)":
+Test "tgamma (-0xb.6ffffffffffffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.6ffffffffffffffffffffffffff8p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0xb7.000000000000000000000000008p0)":
+Test "tgamma (-0xb.7000000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.00000000000001p0)":
+Test "tgamma (-0xb.700000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb7.000000000008p0)":
+Test "tgamma (-0xb.7000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.70001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.7ffffffffffffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb8.00000000000001p0)":
+Test "tgamma (-0xb.7ffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbb.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.800000000000001p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.bfffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.bffffffffffffffffffffffffcp+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0xbb.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.bffffffffffffffffffffffffff8p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0xbc.000000000000000000000000008p0)":
+Test "tgamma (-0xb.bffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbc.0000000000000000000000004p0)":
+Test "tgamma (-0xb.c000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.c0000000000000000000000004p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.c00000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbc.00000000000001p0)":
+Test "tgamma (-0xb.c000000000008p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.c0001p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.cfffffffffff8p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbc.ffffffffffffffp0)":
+Test "tgamma (-0xb.cffffffffffffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbd.000000000000000000000000008p0)":
+Test "tgamma (-0xb.cffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbd.00000000000001p0)":
+Test "tgamma (-0xb.cffffffffffffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.cffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.d000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.d00000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbd.ffffffffffffffp0)":
+Test "tgamma (-0xb.dfffffffffff8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.dffffffffffffffp+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.dffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.e000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.e000000000008p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbe.000000000000000000000000008p0)":
+Test "tgamma (-0xb.e0001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.0000000000000000000000004p0)":
+Test "tgamma (-0xb.efffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.effffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.ffffffffffffffp0)":
+Test "tgamma (-0xb.effffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.000000000000000000000000008p0)":
+Test "tgamma (-0xb.f000000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.0000000000000000000000004p0)":
+Test "tgamma (-0xb.f0000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.00000000000001p0)":
+Test "tgamma (-0xb.f00000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xf9.ffffffffffffffp0)":
+Test "tgamma (-0xb.f0001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xfa.000000000000000000000000008p0)":
+Test "tgamma (-0xf.9fffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.9ffffffffffffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xf.9ffffp+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a000000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-2.5)":
+Test "tgamma (-0xf.a0000000000000000000000004p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a000000000008p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a0001p+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0xf.ffffffffffff8p-4)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "tgamma (-0xf.fffffffffffffffffffffffffff8p-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-3.5)":
-double: 1
+Test "tgamma (-0xf.fffffp-4)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-4.5)":
+Test "tgamma (0x1.28p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-5.5)":
-double: 1
-idouble: 1
-Test "tgamma (-6.5)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (-7.5)":
+Test "tgamma (0x1.38p+4)":
double: 2
-float: 1
idouble: 2
-ifloat: 1
-Test "tgamma (-8.5)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x1.78p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-9.5)":
+Test "tgamma (0x1.d8p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0.5)":
+Test "tgamma (0x1.e8p+4)":
float: 1
ifloat: 1
-Test "tgamma (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (0x1.fffffep0)":
+Test "tgamma (0x1.fffffep+0)":
float: 1
ifloat: 1
-Test "tgamma (0x1.fffffffffffffffep0)":
+Test "tgamma (0x1.fffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1.ffffffffffffffffffffffffffffp0)":
+Test "tgamma (0x1.ffffffffffffffffffffffffffffp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1.fffffffffffffp0)":
+Test "tgamma (0x1.fffffffffffffp+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x1p-113)":
+Test "tgamma (0x1p-24)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.08p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1p-24)":
+Test "tgamma (0x2.18p+4)":
float: 1
ifloat: 1
-Test "tgamma (0x1p-53)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x2.28p+4)":
double: 1
+float: 2
idouble: 1
+ifloat: 2
Test "tgamma (0x2.30a43cp+4)":
double: 1
float: 2
@@ -8811,483 +17308,556 @@ idouble: 1
ifloat: 2
ildouble: 2
ldouble: 2
-Test "tgamma (0x2.fffffcp0)":
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
float: 3
ifloat: 3
-Test "tgamma (0x2.ffffffffffffep0)":
+Test "tgamma (0x2.ffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.0000000000002p0)":
+Test "tgamma (0x3.0000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffcp0)":
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x3.fffffcp+0)":
float: 1
ifloat: 1
-Test "tgamma (0x3.ffffffffffffep0)":
+Test "tgamma (0x3.ffffffffffffep+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffffffffffffcp0)":
+Test "tgamma (0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffffffffffffffffffffffffep0)":
+Test "tgamma (0x3.fffffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.0000000000000000000000000004p0)":
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.0000000000004p0)":
+Test "tgamma (0x4.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x4.000008p0)":
+Test "tgamma (0x4.000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.ffffffffffffcp0)":
+Test "tgamma (0x4.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (0x4.fffffffffffffffffffffffffep0)":
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (0x4.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.0000000000000000000000000004p0)":
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.0000000000004p0)":
+Test "tgamma (0x5.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x5.000008p0)":
+Test "tgamma (0x5.000008p+0)":
float: 2
ifloat: 2
-Test "tgamma (0x5.fffff8p0)":
+Test "tgamma (0x5.fffff8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x5.ffffffffffffcp0)":
+Test "tgamma (0x5.ffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.fffffffffffffff8p0)":
+Test "tgamma (0x5.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.fffffffffffffffffffffffffep0)":
+Test "tgamma (0x5.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000000000000000000004p0)":
+Test "tgamma (0x6.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000000008p0)":
+Test "tgamma (0x6.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000004p0)":
+Test "tgamma (0x6.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x6.000008p0)":
+Test "tgamma (0x6.000008p+0)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.fffff8p0)":
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.db8c603359a94p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x6.fffff8p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.ffffffffffffcp0)":
+Test "tgamma (0x6.ffffffffffffcp+0)":
double: 4
idouble: 4
-Test "tgamma (0x6.fffffffffffffff8p0)":
+Test "tgamma (0x6.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000000000000000000004p0)":
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000000008p0)":
+Test "tgamma (0x7.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000004p0)":
+Test "tgamma (0x7.0000000000004p+0)":
double: 4
idouble: 4
-Test "tgamma (0x7.000008p0)":
+Test "tgamma (0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x7.fffff8p0)":
+Test "tgamma (0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.fffff8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (0x7.ffffffffffffcp0)":
+Test "tgamma (0x7.ffffffffffffcp+0)":
double: 2
idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (0x7.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.0000000000000000000000000008p0)":
+Test "tgamma (0x7p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8.0000000000000000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.0000000000008p0)":
+Test "tgamma (0x8.0000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.00001p0)":
+Test "tgamma (0x8.00001p+0)":
double: 2
idouble: 2
-Test "tgamma (0xa.b9fd72b0fb238p+4)":
+Test "tgamma (0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x8p+0)":
double: 1
idouble: 1
+Test "tgamma (0x8p-116)":
ildouble: 1
ldouble: 1
-Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (10)":
-double: 1
+Test "tgamma (0x8p-4)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (18.5)":
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (19.5)":
-double: 2
-idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (2.5)":
-float: 2
-ifloat: 2
-Test "tgamma (23.5)":
+Test "tgamma (0x9p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (29.5)":
+Test "tgamma (0xa.b9fd72b0fb238p+4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (3)":
-float: 1
-ifloat: 1
-Test "tgamma (3.5)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (30.5)":
-float: 1
-ifloat: 1
-Test "tgamma (32.5)":
+Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (0xa.b9fd72b0fb23a9dp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (33.5)":
-float: 1
-ifloat: 1
+Test "tgamma (0xa.b9fd72b0fb23a9ep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (34.5)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "tgamma (4)":
-float: 1
-ifloat: 1
-Test "tgamma (4.5)":
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (6)":
-float: 1
-ifloat: 1
-Test "tgamma (6.5)":
+Test "tgamma (0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+
+# y0
+Test "y0 (0x1.8p+0)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-Test "tgamma (7)":
+Test "y0 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
-Test "tgamma (7.5)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (8)":
-double: 1
-idouble: 1
-Test "tgamma (8.5)":
-double: 1
+Test "y0 (0x1p-100)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1p-20)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (9)":
-double: 1
-idouble: 1
-Test "tgamma (9.5)":
-double: 1
-idouble: 1
ildouble: 1
ldouble: 1
-
-# y0
-Test "y0 (0x1.3ffp+74)":
+Test "y0 (0x1p-40)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+Test "y0 (0x1p-60)":
ildouble: 1
ldouble: 1
-Test "y0 (0x1.ff00000000002p+840)":
+Test "y0 (0x1p-80)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x4.ffcp+72)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-10)":
+Test "y0 (0x4p+16380)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x4p-112)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-110)":
+Test "y0 (0x4p-12)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-20)":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-30)":
+Test "y0 (0x4p-32)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "y0 (0x1p-40)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y0 (0x1p-50)":
+Test "y0 (0x4p-52)":
float: 1
ifloat: 1
-Test "y0 (0x1p-60)":
-ildouble: 1
-ldouble: 1
-Test "y0 (0x1p-70)":
+Test "y0 (0x4p-72)":
double: 1
idouble: 1
-Test "y0 (0x1p-80)":
+Test "y0 (0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (0x1p1023)":
-ildouble: 1
-ldouble: 1
-Test "y0 (0x1p16382)":
+ildouble: 3
+ldouble: 3
+Test "y0 (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "y0 (0x1p16383)":
+Test "y0 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "y0 (1.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0)":
+Test "y0 (0xap+0)":
float: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "y0 (8.0)":
+Test "y0 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "y0 (0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 3
-ldouble: 3
# y1
-Test "y1 (0.125)":
-double: 1
-idouble: 1
-Test "y1 (0.75)":
+Test "y1 (0x1.8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "y1 (0x1.001000001p+593)":
+Test "y1 (0x1p-100)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1.27e204p+99)":
+Test "y1 (0x1p-20)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x1p-80)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x2.002000002p+592)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "y1 (0x2p-4)":
double: 1
idouble: 1
-Test "y1 (0x1p-10)":
+Test "y1 (0x4p-112)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x4p-12)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y1 (0x1p-30)":
+Test "y1 (0x4p-32)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1p1023)":
+Test "y1 (0x4p-72)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1p16383)":
+Test "y1 (0x4p-92)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "y1 (1.5)":
-float: 1
-ifloat: 1
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "y1 (10.0)":
+Test "y1 (0xap+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "y1 (2.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Test "y1 (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "y1 (8.0)":
+Test "y1 (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+# yn
+Test "yn (-10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-
-# yn
-Test "yn (0, 1.0)":
+Test "yn (0, 0x1.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 1.5)":
+Test "yn (0, 0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 10.0)":
+Test "yn (0, 0x8p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "yn (0, 8.0)":
-double: 1
+Test "yn (0, 0xap+0)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "yn (1, 0.125)":
-double: 1
-idouble: 1
-Test "yn (1, 0.75)":
-ildouble: 1
-ldouble: 1
-Test "yn (1, 1.5)":
+Test "yn (1, 0x1.8p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (1, 10.0)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0)":
+Test "yn (1, 0x2p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "yn (1, 8.0)":
+Test "yn (1, 0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-Test "yn (10, 0.125)":
+Test "yn (10, 0x2p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "yn (10, 0x2p-4)":
double: 1
idouble: 1
ildouble: 2
ldouble: 2
-Test "yn (10, 0.75)":
+Test "yn (10, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 5
-ldouble: 5
-Test "yn (10, 1.0)":
+ildouble: 3
+ldouble: 3
+Test "yn (10, 0xcp-4)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "yn (2, 0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "yn (10, 10.0)":
+Test "yn (2, 0x8p+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "yn (2, 0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "yn (10, 2.0)":
-double: 2
-idouble: 2
-ildouble: 2
-ldouble: 2
-Test "yn (3, 0.125)":
+Test "yn (2, 0xf.fffb1p+96)":
double: 1
idouble: 1
-Test "yn (3, 0.75)":
+ildouble: 1
+ldouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "yn (2, 0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (3, 10.0)":
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (3, 2.0)":
+Test "yn (3, 0xcp-4)":
double: 1
idouble: 1
+ildouble: 2
+ldouble: 2
# Maximal error of functions:
Function: "acos_downward":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "acos_towardzero":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "acos_upward":
+double: 1
+idouble: 1
+
+Function: "acosh":
+double: 1
+idouble: 1
+ldouble: 1
+
+Function: "asin":
ildouble: 1
ldouble: 1
@@ -9299,13 +17869,28 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "asin_tonearest":
+ildouble: 1
+ldouble: 1
+
Function: "asin_towardzero":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: "asin_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "asinh":
+double: 1
float: 1
ifloat: 1
ildouble: 1
@@ -9320,6 +17905,8 @@ ldouble: 1
Function: "atanh":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Real part of "cacos":
double: 1
@@ -9415,7 +18002,9 @@ ldouble: 1
Function: "cbrt":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -9498,54 +18087,80 @@ ildouble: 2
ldouble: 2
Function: "cos":
-double: 2
float: 1
-idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
Function: "cos_downward":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 2
ldouble: 2
Function: "cos_tonearest":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: "cos_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: "cos_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
+ildouble: 2
+ldouble: 2
+
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "cosh_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
-ldouble: 1
+ldouble: 2
Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "cosh_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
-ldouble: 1
+ldouble: 2
Function: "cosh_upward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
-ldouble: 1
+ldouble: 3
Function: Real part of "cpow":
double: 2
@@ -9608,142 +18223,166 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctan_downward":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: Real part of "ctan_downward":
+double: 6
+float: 5
+idouble: 6
+ifloat: 5
ildouble: 4
ldouble: 4
Function: Imaginary part of "ctan_downward":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 5
ldouble: 5
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctan_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 3
ldouble: 3
Function: Real part of "ctan_towardzero":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 4
+ldouble: 4
Function: Imaginary part of "ctan_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 5
ldouble: 5
Function: Real part of "ctan_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
Function: Imaginary part of "ctan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 3
ldouble: 3
Function: Real part of "ctanh":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctanh":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Real part of "ctanh_downward":
+double: 4
float: 1
+idouble: 4
ifloat: 1
ildouble: 5
ldouble: 5
Function: Imaginary part of "ctanh_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+double: 6
+float: 5
+idouble: 6
+ifloat: 5
ildouble: 4
ldouble: 4
Function: Real part of "ctanh_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 3
ldouble: 3
Function: Real part of "ctanh_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 5
ldouble: 5
Function: Imaginary part of "ctanh_towardzero":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 3
+ldouble: 3
Function: Real part of "ctanh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctanh_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
Function: "erf":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Function: "erfc":
double: 1
@@ -9759,29 +18398,73 @@ idouble: 1
ildouble: 1
ldouble: 1
+Function: "exp10_downward":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp10_towardzero":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp10_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
Function: "exp2":
ildouble: 1
ldouble: 1
Function: "exp_downward":
+double: 1
+idouble: 1
+
+Function: "exp_towardzero":
+double: 1
+idouble: 1
+
+Function: "exp_upward":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp_towardzero":
+Function: "expm1_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp_upward":
+Function: "expm1_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "expm1":
+Function: "expm1_towardzero":
double: 1
float: 1
idouble: 1
@@ -9789,17 +18472,27 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "gamma":
+Function: "expm1_upward":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
ildouble: 1
ldouble: 1
-Function: "hypot":
+Function: "gamma":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "hypot":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "j0":
double: 2
@@ -9819,17 +18512,23 @@ ldouble: 4
Function: "jn":
double: 4
-float: 5
+float: 4
idouble: 4
-ifloat: 5
-ildouble: 8
-ldouble: 8
+ifloat: 4
+ildouble: 7
+ldouble: 7
Function: "lgamma":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "log":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -9867,6 +18566,12 @@ Function: "pow_downward":
float: 1
ifloat: 1
+Function: "pow_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "pow_towardzero":
float: 1
ifloat: 1
@@ -9877,12 +18582,20 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "sin_downward":
+Function: "sin":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Function: "sin_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
Function: "sin_tonearest":
float: 1
ifloat: 1
@@ -9890,62 +18603,78 @@ ildouble: 1
ldouble: 1
Function: "sin_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "sin_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 3
+ldouble: 3
Function: "sincos":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "sinh_downward":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "sinh_towardzero":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "sinh_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "tan":
+ildouble: 1
+ldouble: 1
+
+Function: "tan_downward":
double: 1
+float: 2
idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
-Function: "tan_downward":
-float: 1
-ifloat: 1
+Function: "tan_tonearest":
ildouble: 1
ldouble: 1
Function: "tan_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "tan_upward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "tanh":
ildouble: 1
@@ -9980,7 +18709,7 @@ double: 3
float: 2
idouble: 3
ifloat: 2
-ildouble: 5
-ldouble: 5
+ildouble: 4
+ldouble: 4
# end of automatic generation
diff --git a/libc/ports/sysdeps/alpha/tls-macros.h b/libc/ports/sysdeps/alpha/tls-macros.h
index 0385d93e2..00489c289 100644
--- a/libc/ports/sysdeps/alpha/tls-macros.h
+++ b/libc/ports/sysdeps/alpha/tls-macros.h
@@ -2,21 +2,21 @@
extern void *__tls_get_addr (void *);
-# define TLS_GD(x) \
- ({ void *__result; \
- asm ("lda %0, " #x "($gp) !tlsgd" : "=r" (__result)); \
+# define TLS_GD(x) \
+ ({ register void *__gp asm ("$29"); void *__result; \
+ asm ("lda %0, " #x "($gp) !tlsgd" : "=r" (__result) : "r"(__gp)); \
__tls_get_addr (__result); })
-# define TLS_LD(x) \
- ({ void *__result; \
- asm ("lda %0, " #x "($gp) !tlsldm" : "=r" (__result)); \
- __result = __tls_get_addr (__result); \
- asm ("lda %0, " #x "(%0) !dtprel" : "+r" (__result)); \
+# define TLS_LD(x) \
+ ({ register void *__gp asm ("$29"); void *__result; \
+ asm ("lda %0, " #x "($gp) !tlsldm" : "=r" (__result) : "r"(__gp)); \
+ __result = __tls_get_addr (__result); \
+ asm ("lda %0, " #x "(%0) !dtprel" : "+r" (__result)); \
__result; })
-# define TLS_IE(x) \
- ({ long ofs; \
- asm ("ldq %0, " #x "($gp) !gottprel" : "=r"(ofs)); \
+# define TLS_IE(x) \
+ ({ register void *__gp asm ("$29"); long ofs; \
+ asm ("ldq %0, " #x "($gp) !gottprel" : "=r"(ofs) : "r"(__gp)); \
__builtin_thread_pointer () + ofs; })
# define TLS_LE(x) \
diff --git a/libc/ports/sysdeps/hppa/fpu/libm-test-ulps b/libc/ports/sysdeps/hppa/fpu/libm-test-ulps
index 68d753578..1d3bdb18c 100644
--- a/libc/ports/sysdeps/hppa/fpu/libm-test-ulps
+++ b/libc/ports/sysdeps/hppa/fpu/libm-test-ulps
@@ -7,6 +7,9 @@ ifloat: 1
Test "acos_downward (-0.5)":
double: 1
idouble: 1
+Test "acos_downward (-0x8p-4)":
+float: 1
+ifloat: 1
Test "acos_downward (-1)":
float: 1
ifloat: 1
@@ -26,6 +29,9 @@ ifloat: 1
Test "acos_towardzero (-0.5)":
double: 1
idouble: 1
+Test "acos_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
Test "acos_towardzero (-1)":
float: 1
ifloat: 1
@@ -38,13 +44,96 @@ float: 1
idouble: 1
ifloat: 1
+# acos_upward
+Test "acos_upward (+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x1p+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-128)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x8p-972)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d496p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d497p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef56p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-128)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-972)":
+double: 1
+idouble: 1
+
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+
# asin_downward
Test "asin_downward (-0.5)":
double: 1
idouble: 1
+Test "asin_downward (-0x1p+0)":
+double: 1
+idouble: 1
+Test "asin_downward (-0x8p-4)":
+double: 1
+idouble: 1
+Test "asin_downward (-0xf.fffffff8p-4)":
+double: 1
+idouble: 1
+Test "asin_downward (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "asin_downward (-0xf.fffffffffffp-4)":
+double: 1
+idouble: 1
+Test "asin_downward (-0xf.fffffp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "asin_downward (0.5)":
double: 1
idouble: 1
+Test "asin_downward (0x8p-4)":
+float: 1
+ifloat: 1
Test "asin_downward (1.0)":
float: 1
ifloat: 1
@@ -53,39 +142,157 @@ ifloat: 1
Test "asin_towardzero (-0.5)":
double: 1
idouble: 1
+Test "asin_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "asin_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "asin_towardzero (-0x4p-128)":
+double: 1
+idouble: 1
+Test "asin_towardzero (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+Test "asin_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
Test "asin_towardzero (-1.0)":
float: 1
ifloat: 1
Test "asin_towardzero (0.5)":
double: 1
idouble: 1
+Test "asin_towardzero (0x8p-4)":
+float: 1
+ifloat: 1
Test "asin_towardzero (1.0)":
float: 1
ifloat: 1
# asin_upward
+Test "asin_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "asin_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "asin_upward (-0x4p-128)":
+double: 1
+idouble: 1
+Test "asin_upward (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_upward (-0x8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_upward (-0x8p-972)":
+double: 1
+idouble: 1
+Test "asin_upward (-0xf.fffffff8p-4)":
+double: 1
+idouble: 1
+Test "asin_upward (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "asin_upward (-0xf.fffffffffffp-4)":
+double: 1
+idouble: 1
+Test "asin_upward (-0xf.fffffp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "asin_upward (-1.0)":
float: 1
ifloat: 1
+Test "asin_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "asin_upward (0x4p-1024)":
+double: 1
+idouble: 1
+Test "asin_upward (0x4p-1076)":
+double: 1
+idouble: 1
+Test "asin_upward (0x4p-128)":
+double: 1
+idouble: 1
+Test "asin_upward (0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_upward (0x8p-972)":
+double: 1
+idouble: 1
+
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xap+0)":
+float: 1
+ifloat: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
# atan2
Test "atan2 (-0.75, -1.0)":
float: 1
ifloat: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
Test "atan2 (-max_value, -min_value)":
float: 1
ifloat: 1
Test "atan2 (0.75, -1.0)":
float: 1
ifloat: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
+float: 1
+ifloat: 1
+Test "atan2 (0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
Test "atan2 (1.390625, 0.9296875)":
float: 1
ifloat: 1
# atanh
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
Test "atanh (0.75)":
float: 1
ifloat: 1
+Test "atanh (0xcp-4)":
+float: 1
+ifloat: 1
# cacos
Test "Imaginary part of: cacos (+0 + 0.5 i)":
@@ -2694,6 +2901,12 @@ float: 1
ifloat: 1
# cbrt
+Test "cbrt (-0x1.bp+4)":
+double: 1
+idouble: 1
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
Test "cbrt (-27.0)":
double: 1
idouble: 1
@@ -2709,6 +2922,12 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "cbrt (0xcp-4)":
+double: 1
+idouble: 1
+Test "cbrt (0xf.ep-4)":
+double: 1
+idouble: 1
# ccos
Test "Imaginary part of: ccos (-0.75 + 710.5 i)":
@@ -2723,6 +2942,21 @@ idouble: 1
Test "Imaginary part of: ccos (-0.75 - 89.5 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
Test "Imaginary part of: ccos (-2 - 3 i)":
float: 1
ifloat: 1
@@ -2751,8 +2985,49 @@ ifloat: 1
Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
# ccosh
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
Test "Real part of: ccosh (-2 - 3 i)":
float: 1
ifloat: 1
@@ -2781,6 +3056,29 @@ ldouble: 1
Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)":
double: 1
idouble: 1
@@ -2798,6 +3096,12 @@ float: 1
ifloat: 1
# cexp
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
+double: 1
+idouble: 1
Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
float: 1
ifloat: 1
@@ -2807,6 +3111,35 @@ idouble: 1
Test "Real part of: cexp (0.75 + 1.25 i)":
float: 1
ifloat: 1
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)":
double: 1
idouble: 1
@@ -2835,12 +3168,52 @@ float: 2
ifloat: 2
# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
double: 1
idouble: 1
Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
double: 1
idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)":
float: 1
ifloat: 1
@@ -2862,21 +3235,114 @@ ifloat: 1
Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
Test "Real part of: clog (0.75 + 1.25 i)":
float: 1
ifloat: 1
Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+float: 1
+ifloat: 1
Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)":
float: 1
ifloat: 1
Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
+float: 1
+ifloat: 1
Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)":
double: 1
idouble: 1
@@ -2889,9 +3355,309 @@ ifloat: 1
Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
+float: 1
+ifloat: 1
Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
float: 1
ifloat: 1
@@ -3180,6 +3946,15 @@ ifloat: 1
Test "cos (0x1p+127)":
float: 1
ifloat: 1
+Test "cos (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos (0xc.d4967p-4)":
+float: 1
+ifloat: 1
Test "cos (M_PI_6l * 2.0)":
double: 1
idouble: 1
@@ -3194,6 +3969,174 @@ ildouble: 2
ldouble: 2
# cos_downward
+Test "cos_downward (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_downward (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_downward (-0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (-0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_downward (-0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "cos_downward (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1.000004p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.000006p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c1522p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0c1524p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.921fb4p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.921fb6p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1p+120)":
+float: 2
+ifloat: 2
+Test "cos_downward (0x1p+28)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.182a44p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x2.182a4705ae6cap+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.182a48p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x3p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_downward (0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_downward (0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_downward (0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x8p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_downward (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0xa.217bap+12)":
+float: 1
+ifloat: 1
+Test "cos_downward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "cos_downward (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "cos_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
Test "cos_downward (1)":
float: 1
ifloat: 1
@@ -3217,11 +4160,141 @@ float: 1
ifloat: 1
# cos_tonearest
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xc.d4967p-4)":
+float: 1
+ifloat: 1
Test "cos_tonearest (7)":
float: 1
ifloat: 1
# cos_towardzero
+Test "cos_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.182a48p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
Test "cos_towardzero (2)":
float: 1
ifloat: 1
@@ -3239,6 +4312,129 @@ float: 1
ifloat: 1
# cos_upward
+Test "cos_upward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.000002p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1.000004p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.000005bc7d86dp+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.000006p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.0c1522p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.0c152382d7366p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.0c1524p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.921fb4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.921fb6p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x2.182a44p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x2.182a48p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x2.1e19e4p+72)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (0x3p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x4p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x6p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x7p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x8p+1020)":
+double: 1
+idouble: 1
+Test "cos_upward (0x8p+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x9p+0)":
+float: 2
+ifloat: 2
+Test "cos_upward (0xa.217bap+12)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0xap+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0xc.d4966p-4)":
+float: 1
+ifloat: 1
+Test "cos_upward (0xc.d4967p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
Test "cos_upward (10)":
float: 1
ifloat: 1
@@ -3252,7 +4448,54 @@ Test "cos_upward (9)":
float: 2
ifloat: 2
+# cosh
+Test "cosh (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
# cosh_downward
+Test "cosh_downward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x5.96a7ep+4)":
+float: 1
+ifloat: 1
+Test "cosh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x5.96a7ep+4)":
+float: 1
+ifloat: 1
Test "cosh_downward (22)":
float: 1
ifloat: 1
@@ -3263,7 +4506,54 @@ Test "cosh_downward (24)":
float: 1
ifloat: 1
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
# cosh_towardzero
+Test "cosh_towardzero (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x5.96a7ep+4)":
+float: 1
+ifloat: 1
+Test "cosh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x5.96a7ep+4)":
+float: 1
+ifloat: 1
Test "cosh_towardzero (22)":
float: 1
ifloat: 1
@@ -3274,6 +4564,51 @@ Test "cosh_towardzero (24)":
float: 1
ifloat: 1
+# cosh_upward
+Test "cosh_upward (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh_upward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "cosh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x3.2p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
float: 1
@@ -3295,6 +4630,27 @@ idouble: 2
ifloat: 3
ildouble: 2
ldouble: 2
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
double: 1
float: 4
@@ -3386,6 +4742,18 @@ ifloat: 1
Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
double: 1
idouble: 1
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
Test "Real part of: csqrt (-2 + 3 i)":
float: 1
ifloat: 1
@@ -3407,8 +4775,53 @@ idouble: 1
Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
double: 1
idouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
# ctan
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
Test "Real part of: ctan (-2 - 3 i)":
float: 1
ifloat: 1
@@ -3420,6 +4833,49 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
Test "Real part of: ctan (0x1p1023 + 1 i)":
double: 1
idouble: 1
@@ -3429,8 +4885,55 @@ idouble: 1
Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
float: 1
ifloat: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# ctan_downward
+Test "Real part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 3
+idouble: 3
+Test "Imaginary part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + +0 i)":
+double: 1
+idouble: 1
Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
double: 2
float: 1
@@ -3439,27 +4942,270 @@ ifloat: 1
Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
float: 1
ifloat: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_downward (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_downward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 3
+idouble: 3
+Test "Imaginary part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_tonearest
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
float: 1
ifloat: 1
Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
float: 1
ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# ctan_towardzero
+Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+Test "Imaginary part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
float: 1
ifloat: 1
Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
float: 1
ifloat: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+double: 5
+idouble: 5
+Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_upward
+Test "Real part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Imaginary part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
double: 1
idouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + +0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
double: 2
float: 1
@@ -3470,8 +5216,127 @@ double: 1
float: 2
idouble: 1
ifloat: 2
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63ap+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_upward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
# ctanh
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: ctanh (-2 - 3 i)":
double: 1
float: 2
@@ -3502,6 +5367,63 @@ ldouble: 1
Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
float: 2
ifloat: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
double: 1
idouble: 1
@@ -3510,6 +5432,44 @@ double: 1
idouble: 1
# ctanh_downward
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 4
+float: 1
+idouble: 4
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 3
+idouble: 3
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
@@ -3518,24 +5478,307 @@ double: 2
float: 1
idouble: 2
ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
# ctanh_towardzero
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+double: 5
+idouble: 5
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# ctanh_upward
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb6p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdap-4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Imaginary part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x1.63ap+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x1.63p+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
double: 1
idouble: 1
@@ -3549,8 +5792,79 @@ double: 2
float: 1
idouble: 2
ifloat: 1
+Test "Real part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
# erf
+Test "erf (0x1.4p+0)":
+double: 1
+idouble: 1
Test "erf (1.25)":
double: 1
idouble: 1
@@ -3558,12 +5872,30 @@ ildouble: 1
ldouble: 1
# erfc
+Test "erfc (-0x8p-4)":
+float: 1
+ifloat: 1
Test "erfc (0x1.f7303cp+1)":
double: 1
idouble: 1
Test "erfc (0x1.ffa002p+2)":
float: 1
ifloat: 1
+Test "erfc (0x2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x7.fe8008p+0)":
+float: 1
+ifloat: 1
+Test "erfc (0x7.fffd6p+0)":
+float: 1
+ifloat: 1
Test "erfc (2.0)":
double: 1
idouble: 1
@@ -3576,6 +5908,15 @@ ildouble: 1
ldouble: 1
# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
Test "exp10 (-1)":
double: 2
float: 1
@@ -3596,6 +5937,12 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
+double: 1
+idouble: 1
Test "exp10 (3)":
double: 6
float: 2
@@ -3607,7 +5954,56 @@ Test "exp10 (36)":
double: 1
idouble: 1
+# exp10_downward
+Test "exp10_downward (0x2.4p+4)":
+double: 1
+idouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_towardzero
+Test "exp10_towardzero (0x2.4p+4)":
+double: 1
+idouble: 1
+
+# exp10_upward
+Test "exp10_upward (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_upward (0x3p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
# exp_downward
+Test "exp_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_downward (0xcp-4)":
+double: 1
+idouble: 1
Test "exp_downward (2)":
float: 1
ifloat: 1
@@ -3616,6 +6012,18 @@ float: 1
ifloat: 1
# exp_towardzero
+Test "exp_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0xcp-4)":
+double: 1
+idouble: 1
Test "exp_towardzero (2)":
float: 1
ifloat: 1
@@ -3624,6 +6032,36 @@ float: 1
ifloat: 1
# exp_upward
+Test "exp_upward (-0x2.e870a4p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88c2p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a8p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe224p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe227861639p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe228p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "exp_upward (0x2.c5cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (0x3.2p+4)":
+double: 1
+idouble: 1
Test "exp_upward (1)":
float: 1
ifloat: 1
@@ -3634,6 +6072,17 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1 (0xcp-4)":
+double: 1
+idouble: 1
Test "expm1 (1)":
float: 1
ifloat: 1
@@ -3641,12 +6090,136 @@ Test "expm1 (500.0)":
double: 1
idouble: 1
+# expm1_downward
+Test "expm1_downward (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_downward (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_downward (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_towardzero
+Test "expm1_towardzero (-0x1p-100)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (-0x1p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x1p-64)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (-0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_towardzero (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# expm1_upward
+Test "expm1_upward (-0x1p-100)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_upward (-0x1p-32)":
+float: 1
+ifloat: 1
+Test "expm1_upward (-0x1p-64)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_upward (-0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_upward (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x1p-100)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_upward (0x1p-32)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x1p-64)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_upward (0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x8p-32)":
+float: 1
+ifloat: 1
+
# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x2p-16)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
Test "gamma (0.7)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "gamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
Test "gamma (1.2)":
double: 1
float: 2
@@ -3660,6 +6233,18 @@ ifloat: 1
Test "hypot (-0.7, 12.4)":
float: 1
ifloat: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
Test "hypot (-12.4, -0.7)":
float: 1
ifloat: 1
@@ -3672,6 +6257,18 @@ ifloat: 1
Test "hypot (0.7, 12.4)":
float: 1
ifloat: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
Test "hypot (12.4, -0.7)":
float: 1
ifloat: 1
@@ -3680,6 +6277,16 @@ float: 1
ifloat: 1
# j0
+Test "j0 (-0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Test "j0 (-4.0)":
double: 1
float: 1
@@ -3693,6 +6300,33 @@ ifloat: 1
Test "j0 (0x1.d7ce3ap+107)":
float: 2
ifloat: 2
+Test "j0 (0x2p+0)":
+float: 2
+ifloat: 2
+Test "j0 (0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0x8p+0)":
+float: 1
+ifloat: 1
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Test "j0 (10.0)":
double: 2
float: 1
@@ -3721,6 +6355,26 @@ idouble: 1
Test "j1 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "j1 (0x8p+0)":
+double: 1
+idouble: 1
+Test "j1 (0xap+0)":
+float: 2
+ifloat: 2
+Test "j1 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "j1 (0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "j1 (10.0)":
float: 2
ifloat: 2
@@ -3736,6 +6390,11 @@ ildouble: 1
ldouble: 1
# jn
+Test "jn (0, -0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "jn (0, -4.0)":
double: 1
float: 1
@@ -3746,6 +6405,25 @@ ldouble: 1
Test "jn (0, 0.75)":
float: 1
ifloat: 1
+Test "jn (0, 0x2p+0)":
+float: 2
+ifloat: 2
+Test "jn (0, 0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0x8p+0)":
+float: 1
+ifloat: 1
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
Test "jn (0, 10.0)":
double: 2
float: 1
@@ -3766,6 +6444,15 @@ ldouble: 1
Test "jn (0, 8.0)":
float: 1
ifloat: 1
+Test "jn (1, 0x2p+0)":
+double: 1
+idouble: 1
+Test "jn (1, 0x8p+0)":
+double: 1
+idouble: 1
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
Test "jn (1, 10.0)":
float: 2
ifloat: 2
@@ -3793,6 +6480,26 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "jn (10, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "jn (10, 10.0)":
double: 4
float: 3
@@ -3810,6 +6517,33 @@ double: 2
float: 2
idouble: 2
ifloat: 2
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (2, 0x8p+124)":
+double: 1
+idouble: 1
+Test "jn (2, 0xf.fffb1p+96)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Test "jn (2, 2.4048255576957729)":
double: 2
float: 1
@@ -3829,6 +6563,38 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (3, 0x2p+0)":
+float: 1
+ifloat: 1
+Test "jn (3, 0x2p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0xap+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "jn (3, 10.0)":
double: 3
float: 1
@@ -3846,29 +6612,116 @@ ldouble: 1
Test "jn (3, 2.4048255576957729)":
double: 3
idouble: 3
+Test "jn (4, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
+float: 1
+ifloat: 1
Test "jn (4, 2.4048255576957729)":
double: 1
idouble: 1
+Test "jn (5, 0x2.67a2a4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
Test "jn (5, 2.4048255576957729)":
double: 3
float: 1
idouble: 3
ifloat: 1
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
+double: 4
+idouble: 4
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
Test "jn (6, 2.4048255576957729)":
double: 4
float: 3
idouble: 4
ifloat: 3
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
Test "jn (7, 2.4048255576957729)":
double: 3
float: 5
idouble: 3
ifloat: 5
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
Test "jn (8, 2.4048255576957729)":
double: 3
float: 2
idouble: 3
ifloat: 2
+Test "jn (9, 0x2.67a2a4p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
Test "jn (9, 2.4048255576957729)":
double: 1
float: 2
@@ -3876,6 +6729,20 @@ idouble: 1
ifloat: 2
# lgamma
+Test "lgamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "lgamma (-0x2p-16)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "lgamma (-0x8p-8)":
+double: 1
+idouble: 1
Test "lgamma (0.7)":
double: 1
float: 1
@@ -3883,6 +6750,18 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "lgamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "lgamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
Test "lgamma (1.2)":
double: 1
float: 2
@@ -3891,6 +6770,11 @@ ifloat: 2
ildouble: 1
ldouble: 1
+# log
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
+
# log10
Test "log10 (0.75)":
double: 1
@@ -3899,6 +6783,14 @@ idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+Test "log10 (0xcp-4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
Test "log10 (e)":
float: 1
ifloat: 1
@@ -3907,6 +6799,12 @@ ifloat: 1
Test "log1p (-0.25)":
float: 1
ifloat: 1
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e15p+0)":
+float: 1
+ifloat: 1
# pow
Test "pow (0x0.ffffffp0, -0x1p24)":
@@ -3915,11 +6813,29 @@ ifloat: 1
Test "pow (0x0.ffffffp0, 0x1p24)":
float: 1
ifloat: 1
+Test "pow (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
Test "pow (0x1.000002p0, 0x1p24)":
float: 1
ifloat: 1
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
# pow10
+Test "pow10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "pow10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "pow10 (-0x2.4p+4)":
+double: 1
+idouble: 1
Test "pow10 (-1)":
double: 1
idouble: 1
@@ -3929,6 +6845,12 @@ idouble: 1
Test "pow10 (-36)":
double: 1
idouble: 1
+Test "pow10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "pow10 (0x3p+0)":
+double: 1
+idouble: 1
Test "pow10 (3)":
double: 1
idouble: 1
@@ -3941,6 +6863,17 @@ Test "pow_downward (1.5, 1.03125)":
float: 1
ifloat: 1
+# pow_tonearest
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
# pow_towardzero
Test "pow_towardzero (1.5, 1.03125)":
float: 1
@@ -3951,7 +6884,157 @@ Test "pow_upward (1.0625, 1.125)":
float: 1
ifloat: 1
+# sin
+Test "sin (0x1p+0)":
+float: 1
+ifloat: 1
+
# sin_downward
+Test "sin_downward (-0x1.921fb4p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x1.921fb6p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a92p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1p+120)":
+float: 1
+ifloat: 1
+Test "sin_downward (0x1p+28)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "sin_downward (0x2.1e19ep+72)":
+float: 2
+ifloat: 2
+Test "sin_downward (0x2.553534p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.be735c19be9fep+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.be736p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x3.ec2a0250032a2p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.ec2a0250032ap+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.ec2ap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x3p+0)":
+float: 1
+ifloat: 1
+Test "sin_downward (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f7084p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f708p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237ep+0)":
+float: 1
+ifloat: 1
+Test "sin_downward (0x4.c92d08p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x4.c92d1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x4p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec7477d4a84p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec7477d4a8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec78p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0x6p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_downward (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
Test "sin_downward (10)":
float: 1
ifloat: 1
@@ -3966,11 +7049,116 @@ float: 1
ifloat: 1
# sin_tonearest
+Test "sin_tonearest (0x1p+0)":
+float: 1
+ifloat: 1
Test "sin_tonearest (1)":
float: 1
ifloat: 1
# sin_towardzero
+Test "sin_towardzero (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1p+0)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.1e19ep+72)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x2.553534p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x3.be735cp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x3.ec2a04p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237e8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237ep+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x9p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xe.ef3afp-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
Test "sin_towardzero (1)":
float: 1
ifloat: 1
@@ -3988,6 +7176,169 @@ float: 1
ifloat: 1
# sin_upward
+Test "sin_upward (-0x1.921fb4p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (-0x1.921fb6p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x1.921fb4p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1.921fb6p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x1p+28)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2.1e19ep+72)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x2.5535376715b9ep+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2.553538p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_upward (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x3.be735cp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x3.be736p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x3.ec2a04p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x3p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x4.093385688a2d4p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.093385688a2dp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.09338p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.1237e8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "sin_upward (0x4.1237ep+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x4.c92d08p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.c92d1p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x4p+0)":
+float: 2
+ifloat: 2
+Test "sin_upward (0x4p+48)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x5p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x7p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a92p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x8p+124)":
+double: 1
+idouble: 1
+Test "sin_upward (0x9p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0xap+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+Test "sin_upward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xc.d4967p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xcp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8008p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3afp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3bp-4)":
+double: 1
+idouble: 1
Test "sin_upward (1)":
float: 1
ifloat: 1
@@ -4002,12 +7353,24 @@ float: 1
ifloat: 1
# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
+float: 1
+ifloat: 1
Test "sincos (0x1p+120) extra output 2":
float: 1
ifloat: 1
Test "sincos (0x1p+127) extra output 2":
float: 1
ifloat: 1
+Test "sincos (0x8.60a92p-4) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0x8p+124) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0xc.d4967p-4) extra output 2":
+float: 1
+ifloat: 1
Test "sincos (M_PI_6l*2.0) extra output 1":
double: 1
float: 1
@@ -4025,6 +7388,12 @@ float: 1
ifloat: 1
# sinh_downward
+Test "sinh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "sinh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
Test "sinh_downward (22)":
float: 1
ifloat: 1
@@ -4036,6 +7405,12 @@ float: 1
ifloat: 1
# sinh_towardzero
+Test "sinh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "sinh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
Test "sinh_towardzero (22)":
float: 1
ifloat: 1
@@ -4046,7 +7421,148 @@ Test "sinh_towardzero (24)":
float: 1
ifloat: 1
+# sinh_upward
+Test "sinh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
+Test "sinh_upward (0x8p-32)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
# tan_downward
+Test "tan_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.908p-4)":
+float: 2
+ifloat: 2
+Test "tan_downward (-0xc.90cp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90ep-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90f8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fcp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fd8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdap-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdbp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fep-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.91p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.92p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.9p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.ap-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0x1p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "tan_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tan_downward (0x6p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x7p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x8p+1020)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.92p-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (0xc.94p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (0xc.98p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (0xc.ap-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (0xcp-4)":
+double: 1
+idouble: 1
Test "tan_downward (1)":
float: 1
ifloat: 1
@@ -4067,6 +7583,89 @@ float: 1
ifloat: 1
# tan_towardzero
+Test "tan_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (-0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x7p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
Test "tan_towardzero (10)":
float: 1
ifloat: 1
@@ -4084,6 +7683,150 @@ float: 1
ifloat: 1
# tan_upward
+Test "tan_upward (-0xc.908p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (-0xc.90cp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (-0xc.90ep-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90f8p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fd8p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdap-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdbp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdcp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fep-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.91p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (-0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (-0xc.9p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_upward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "tan_upward (0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_upward (0x4p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0x7p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x8p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0x9p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (0xc.908p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xc.90ep-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90f8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fd8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdap-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdbp-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdcp-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fep-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fp-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.91p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.92p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (0xc.94p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xc.98p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xc.9p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.ap-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (0xcp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_upward (0xf.fffffp+124)":
+double: 1
+idouble: 1
Test "tan_upward (1)":
float: 1
ifloat: 1
@@ -4111,12 +7854,37 @@ idouble: 1
Test "tgamma (-0x0.ffffffp0)":
float: 1
ifloat: 1
+Test "tgamma (-0x1.000002p+0)":
+double: 2
+idouble: 2
Test "tgamma (-0x1.000002p0)":
double: 2
idouble: 2
Test "tgamma (-0x1.0a32a2p+5)":
float: 2
ifloat: 2
+Test "tgamma (-0x1.3ffffep+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x1.4000000000001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x1.400002p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x1.dffffep+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x1.e000000000001p+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x1.e00002p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (-0x13.ffffep0)":
float: 2
ifloat: 2
@@ -4139,14 +7907,50 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (-0x2.0000000000002p+0)":
+double: 1
+idouble: 1
Test "tgamma (-0x2.0000000000002p0)":
double: 1
idouble: 1
+Test "tgamma (-0x2.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "tgamma (-0x2.000004p0)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.8000000000002p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.800004p+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x2.8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (-0x2.900004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.9ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (-0x2.fffffcp0)":
double: 1
float: 1
@@ -4167,47 +7971,119 @@ idouble: 1
Test "tgamma (-0x29.ffffcp0)":
double: 1
idouble: 1
+Test "tgamma (-0x3.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "tgamma (-0x3.000004p0)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x3.1fffffffffffep+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x3.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (-0x3.fffffcp0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (-0x3.ffffffffffffep+0)":
+double: 2
+idouble: 2
Test "tgamma (-0x3.ffffffffffffep0)":
double: 2
idouble: 2
Test "tgamma (-0x31.fffffffffffep0)":
double: 3
idouble: 3
+Test "tgamma (-0x4.000008p+0)":
+float: 1
+ifloat: 1
Test "tgamma (-0x4.000008p0)":
float: 1
ifloat: 1
+Test "tgamma (-0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x4.fffff8p+0)":
+double: 1
+idouble: 1
Test "tgamma (-0x4.fffff8p0)":
double: 1
idouble: 1
+Test "tgamma (-0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
Test "tgamma (-0x4.ffffffffffffcp0)":
double: 1
idouble: 1
+Test "tgamma (-0x5.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (-0x5.000008p0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (-0x5.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.ffffffffffffcp+0)":
+double: 1
+idouble: 1
Test "tgamma (-0x5.ffffffffffffcp0)":
double: 1
idouble: 1
+Test "tgamma (-0x6.000008p+0)":
+float: 2
+ifloat: 2
Test "tgamma (-0x6.000008p0)":
float: 2
ifloat: 2
+Test "tgamma (-0x6.3fffffffffffcp+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "tgamma (-0x6.fffff8p0)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
Test "tgamma (-0x6.ffffffffffffcp0)":
double: 4
idouble: 4
@@ -4217,37 +8093,100 @@ idouble: 2
Test "tgamma (-0x64.000000000004p0)":
double: 1
idouble: 1
+Test "tgamma (-0x7.0000000000004p+0)":
+double: 3
+idouble: 3
Test "tgamma (-0x7.0000000000004p0)":
double: 3
idouble: 3
+Test "tgamma (-0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (-0x7.000008p0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (-0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x7.fffff8p+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
Test "tgamma (-0x7.fffff8p0)":
double: 3
float: 1
idouble: 3
ifloat: 1
+Test "tgamma (-0x7.ffffffffffffcp+0)":
+double: 3
+idouble: 3
Test "tgamma (-0x7.ffffffffffffcp0)":
double: 3
idouble: 3
+Test "tgamma (-0x8.00001p+0)":
+double: 2
+idouble: 2
Test "tgamma (-0x8.00001p0)":
double: 2
idouble: 2
+Test "tgamma (-0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x9.6000000000008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.60001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x9.ffffffffffff8p+0)":
+double: 1
+idouble: 1
Test "tgamma (-0x9.ffffffffffff8p0)":
double: 1
idouble: 1
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
+ifloat: 1
Test "tgamma (-0x9.fffffp0)":
float: 1
ifloat: 1
Test "tgamma (-0x96.000000000008p0)":
double: 1
idouble: 1
+Test "tgamma (-0xa.00001p+0)":
+double: 1
+idouble: 1
Test "tgamma (-0xa.00001p0)":
double: 1
idouble: 1
+Test "tgamma (-0xa.c0001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.fffffp-4)":
+float: 1
+ifloat: 1
Test "tgamma (-2.5)":
double: 1
float: 2
@@ -4294,9 +8233,36 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "tgamma (0x1.28p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.38p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0x1.78p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.d8p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.e8p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffep+0)":
+float: 1
+ifloat: 1
Test "tgamma (0x1.fffffep0)":
float: 1
ifloat: 1
+Test "tgamma (0x1.fffffffffffffp+0)":
+double: 1
+idouble: 1
Test "tgamma (0x1.fffffffffffffp0)":
double: 1
idouble: 1
@@ -4306,71 +8272,195 @@ ifloat: 1
Test "tgamma (0x1p-53)":
double: 1
idouble: 1
+Test "tgamma (0x2.18p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.28p+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
Test "tgamma (0x2.30a43cp+4)":
double: 1
float: 2
idouble: 1
ifloat: 2
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
+float: 3
+ifloat: 3
Test "tgamma (0x2.fffffcp0)":
float: 3
ifloat: 3
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x3.fffffcp+0)":
+float: 1
+ifloat: 1
Test "tgamma (0x3.fffffcp0)":
float: 1
ifloat: 1
+Test "tgamma (0x3.ffffffffffffep+0)":
+double: 1
+idouble: 1
Test "tgamma (0x3.ffffffffffffep0)":
double: 1
idouble: 1
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000004p+0)":
+double: 1
+idouble: 1
Test "tgamma (0x4.0000000000004p0)":
double: 1
idouble: 1
+Test "tgamma (0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
Test "tgamma (0x4.ffffffffffffcp0)":
double: 1
idouble: 1
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000004p+0)":
+double: 1
+idouble: 1
Test "tgamma (0x5.0000000000004p0)":
double: 1
idouble: 1
+Test "tgamma (0x5.000008p+0)":
+float: 2
+ifloat: 2
Test "tgamma (0x5.000008p0)":
float: 2
ifloat: 2
+Test "tgamma (0x5.fffff8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (0x5.fffff8p0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (0x6.0000000000004p+0)":
+double: 1
+idouble: 1
Test "tgamma (0x6.0000000000004p0)":
double: 1
idouble: 1
+Test "tgamma (0x6.000008p+0)":
+float: 2
+ifloat: 2
Test "tgamma (0x6.000008p0)":
float: 2
ifloat: 2
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.fffff8p+0)":
+double: 1
+idouble: 1
Test "tgamma (0x6.fffff8p0)":
double: 1
idouble: 1
+Test "tgamma (0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
Test "tgamma (0x6.ffffffffffffcp0)":
double: 4
idouble: 4
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000004p+0)":
+double: 4
+idouble: 4
Test "tgamma (0x7.0000000000004p0)":
double: 4
idouble: 4
+Test "tgamma (0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (0x7.000008p0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "tgamma (0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "tgamma (0x7.fffff8p0)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "tgamma (0x7.ffffffffffffcp+0)":
+double: 2
+idouble: 2
Test "tgamma (0x7.ffffffffffffcp0)":
double: 2
idouble: 2
+Test "tgamma (0x7p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8.00001p+0)":
+double: 2
+idouble: 2
Test "tgamma (0x8.00001p0)":
double: 2
idouble: 2
+Test "tgamma (0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8p-4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x9p+0)":
+double: 1
+idouble: 1
Test "tgamma (0xa.b9fd72b0fb238p+4)":
double: 1
idouble: 1
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "tgamma (10)":
double: 1
float: 1
@@ -4455,9 +8545,19 @@ idouble: 1
Test "y0 (0x1.3ffp+74)":
double: 1
idouble: 1
+Test "y0 (0x1.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "y0 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
+Test "y0 (0x1p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Test "y0 (0x1p-10)":
double: 1
idouble: 1
@@ -4486,6 +8586,40 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "y0 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-112)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-32)":
+float: 1
+ifloat: 1
+Test "y0 (0x4p-52)":
+float: 1
+ifloat: 1
+Test "y0 (0x4p-72)":
+double: 1
+idouble: 1
+Test "y0 (0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0xap+0)":
+float: 1
+ifloat: 1
+Test "y0 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "y0 (0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "y0 (1.0)":
double: 2
float: 1
@@ -4520,9 +8654,41 @@ ldouble: 1
Test "y1 (0x1.27e204p+99)":
double: 1
idouble: 1
+Test "y1 (0x1.8p+0)":
+float: 1
+ifloat: 1
Test "y1 (0x1p-10)":
double: 1
idouble: 1
+Test "y1 (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (0x2p-4)":
+double: 1
+idouble: 1
+Test "y1 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y1 (0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
+Test "y1 (0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Test "y1 (1.5)":
float: 1
ifloat: 1
@@ -4549,6 +8715,29 @@ ildouble: 1
ldouble: 1
# yn
+Test "yn (-10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (0, 0x1.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x1p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (0, 0xap+0)":
+float: 1
+ifloat: 1
Test "yn (0, 1.0)":
double: 2
float: 1
@@ -4578,6 +8767,27 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "yn (1, 0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "yn (1, 0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (1, 0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
Test "yn (1, 1.5)":
float: 1
ifloat: 1
@@ -4614,6 +8824,29 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "yn (10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0x2p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (10, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (10, 0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "yn (10, 1.0)":
double: 1
idouble: 1
@@ -4631,6 +8864,22 @@ double: 2
idouble: 2
ildouble: 2
ldouble: 2
+Test "yn (2, 0x8p+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (2, 0xf.fffb1p+96)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "yn (3, 0.125)":
double: 1
idouble: 1
@@ -4643,6 +8892,20 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 0xcp-4)":
+double: 1
+idouble: 1
Test "yn (3, 10.0)":
double: 1
float: 1
@@ -4669,6 +8932,14 @@ float: 1
idouble: 1
ifloat: 1
+Function: "acos_upward":
+double: 1
+idouble: 1
+
+Function: "acosh":
+double: 1
+idouble: 1
+
Function: "asin_downward":
double: 1
float: 1
@@ -4682,6 +8953,13 @@ idouble: 1
ifloat: 1
Function: "asin_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "asinh":
+double: 1
float: 1
ifloat: 1
@@ -4773,7 +9051,9 @@ ifloat: 1
Function: "cbrt":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -4850,29 +9130,57 @@ ildouble: 2
ldouble: 2
Function: "cos_downward":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
Function: "cos_tonearest":
float: 1
ifloat: 1
Function: "cos_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "cos_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: "cosh_downward":
+double: 1
float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
Function: "cosh_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Function: "cosh_upward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
Function: Real part of "cpow":
double: 2
float: 4
@@ -4926,100 +9234,110 @@ idouble: 1
ifloat: 1
Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: Real part of "ctan_downward":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "ctan_downward":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: Imaginary part of "ctan_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Real part of "ctan_towardzero":
-float: 1
-ifloat: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
Function: Imaginary part of "ctan_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Function: Real part of "ctan_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
+ifloat: 3
Function: Imaginary part of "ctan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
Function: Real part of "ctanh":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
Function: Imaginary part of "ctanh":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
Function: Real part of "ctanh_downward":
+double: 4
float: 1
+idouble: 4
ifloat: 1
-Function: Imaginary part of "ctanh_downward":
+Function: Real part of "ctanh_tonearest":
double: 2
float: 1
idouble: 2
ifloat: 1
-Function: Real part of "ctanh_tonearest":
-float: 1
-ifloat: 1
-
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Function: Real part of "ctanh_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Function: Imaginary part of "ctanh_towardzero":
-float: 1
-ifloat: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
Function: Real part of "ctanh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
Function: Imaginary part of "ctanh_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
+ifloat: 3
Function: "erf":
double: 1
@@ -5043,16 +9361,40 @@ ifloat: 2
ildouble: 6
ldouble: 6
+Function: "exp10_downward":
+double: 1
+idouble: 1
+
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+
+Function: "exp10_towardzero":
+double: 1
+idouble: 1
+
+Function: "exp10_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: "exp_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "exp_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "exp_upward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "expm1":
@@ -5063,6 +9405,30 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "expm1_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "expm1_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "expm1_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "expm1_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: "gamma":
double: 1
float: 2
@@ -5070,7 +9436,9 @@ idouble: 1
ifloat: 2
Function: "hypot":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "j0":
@@ -5105,6 +9473,10 @@ ifloat: 2
ildouble: 1
ldouble: 1
+Function: "log":
+float: 1
+ifloat: 1
+
Function: "log10":
double: 1
float: 2
@@ -5129,6 +9501,10 @@ Function: "pow_downward":
float: 1
ifloat: 1
+Function: "pow_tonearest":
+float: 1
+ifloat: 1
+
Function: "pow_towardzero":
float: 1
ifloat: 1
@@ -5137,20 +9513,30 @@ Function: "pow_upward":
float: 1
ifloat: 1
-Function: "sin_downward":
+Function: "sin":
float: 1
ifloat: 1
+Function: "sin_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
Function: "sin_tonearest":
float: 1
ifloat: 1
Function: "sin_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "sin_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
Function: "sincos":
@@ -5162,11 +9548,21 @@ ildouble: 1
ldouble: 1
Function: "sinh_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "sinh_towardzero":
+double: 1
float: 1
+idouble: 1
+ifloat: 1
+
+Function: "sinh_upward":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
Function: "tan":
@@ -5176,15 +9572,21 @@ ildouble: 1
ldouble: 1
Function: "tan_downward":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
Function: "tan_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "tan_upward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: "tgamma":
diff --git a/libc/ports/sysdeps/m68k/m680x0/fpu/libm-test-ulps b/libc/ports/sysdeps/m68k/m680x0/fpu/libm-test-ulps
index 87117ae60..b4333a07f 100644
--- a/libc/ports/sysdeps/m68k/m680x0/fpu/libm-test-ulps
+++ b/libc/ports/sysdeps/m68k/m680x0/fpu/libm-test-ulps
@@ -1,184 +1,203 @@
# Begin of automatic generation
-# acos_downward
-Test "acos_downward (-0)":
-float: 1
-ifloat: 1
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+
+# asin_downward
+Test "asin_downward (-0x2p-16384)":
ildouble: 1
ldouble: 1
-Test "acos_downward (-0.5)":
+Test "asin_downward (-0x4p-1024)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "acos_downward (-1)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "acos_downward (0)":
-float: 1
-ifloat: 1
+Test "asin_downward (-0x4p-1076)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "acos_downward (0.5)":
+Test "asin_downward (-0x4p-128)":
double: 1
float: 1
idouble: 1
ifloat: 1
-
-# acos_towardzero
-Test "acos_towardzero (-0)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "acos_towardzero (-0.5)":
+Test "asin_downward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0x8p-152)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "acos_towardzero (-1)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "acos_towardzero (0)":
-float: 1
-ifloat: 1
+Test "asin_downward (-0x8p-16448)":
ildouble: 1
ldouble: 1
-Test "acos_towardzero (0.5)":
+Test "asin_downward (-0x8p-972)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+ildouble: 1
+ldouble: 1
-# acos_upward
-Test "acos_upward (-0)":
+# asin_towardzero
+Test "asin_towardzero (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-1024)":
double: 1
idouble: 1
-Test "acos_upward (-0.5)":
ildouble: 1
ldouble: 1
-Test "acos_upward (-1)":
+Test "asin_towardzero (-0x4p-1076)":
double: 1
idouble: 1
-Test "acos_upward (0)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-128)":
double: 1
+float: 1
idouble: 1
-Test "acos_upward (0.5)":
+ifloat: 1
ildouble: 1
ldouble: 1
-
-# acosh
-Test "acosh (7)":
+Test "asin_towardzero (-0x4p-16384)":
ildouble: 1
ldouble: 1
-
-# asin_downward
-Test "asin_downward (-0.5)":
+Test "asin_towardzero (-0x4p-16448)":
ildouble: 1
ldouble: 1
-Test "asin_downward (-1.0)":
-double: 1
-idouble: 1
-Test "asin_downward (0.5)":
+Test "asin_towardzero (-0x8p-152)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "asin_downward (1.0)":
-float: 1
-ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-# asin_towardzero
-Test "asin_towardzero (-0.5)":
+# asin_upward
+Test "asin_upward (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-1024)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "asin_towardzero (-1.0)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "asin_towardzero (0.5)":
+Test "asin_upward (-0x4p-1076)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "asin_towardzero (1.0)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-
-# asin_upward
-Test "asin_upward (-0.5)":
+Test "asin_upward (-0x4p-128)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "asin_upward (-1.0)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "asin_upward (0.5)":
+Test "asin_upward (-0x8p-16448)":
ildouble: 1
ldouble: 1
-Test "asin_upward (1.0)":
+Test "asin_upward (-0x8p-972)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
# asinh
-Test "asinh (0.75)":
+Test "asinh (0x1p+100)":
+ildouble: 1
+ldouble: 1
+Test "asinh (0xap+0)":
+float: 1
+ifloat: 1
+Test "asinh (0xf.424p+16)":
ildouble: 1
ldouble: 1
# atan2
-Test "atan2 (0.390625, .00029)":
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51248p-12)":
ildouble: 1
ldouble: 1
-Test "atan2 (1.390625, 0.9296875)":
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e5124664p-12)":
ildouble: 1
ldouble: 1
-
-# atanh
-Test "atanh (0.75)":
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe8p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x4p-16384, 0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x8p-16448, 0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x4p-16384, 0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.30164840e1719f7ep-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.30164840e1719f8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x8p-16448, 0x4p-16448)":
ildouble: 1
ldouble: 1
# cacos
Test "Imaginary part of: cacos (+0 + 0.5 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: cacos (+0 + 1.0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: cacos (+0 + 1.5 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: cacos (+0 - 0.5 i)":
double: 1
-float: 1
idouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i)":
+float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: cacos (+0 - 1.0 i)":
double: 1
float: 1
@@ -188,31 +207,19 @@ Test "Imaginary part of: cacos (+0 - 1.5 i)":
double: 1
idouble: 1
Test "Imaginary part of: cacos (-0 + 0.5 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: cacos (-0 + 1.0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: cacos (-0 + 1.5 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: cacos (-0 - 0.5 i)":
double: 1
-float: 1
idouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i)":
+float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: cacos (-0 - 1.0 i)":
double: 1
float: 1
@@ -564,10 +571,6 @@ Test "Imaginary part of: cacos (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Imaginary part of: cacos (-1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: cacos (-1.5 + 0x1.fp-1025 i)":
@@ -742,15 +745,8 @@ ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cacos (0.75 + 1.25 i)":
-float: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: cacos (0.75 + 1.25 i)":
float: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Real part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)":
ildouble: 1
ldouble: 1
@@ -1104,10 +1100,6 @@ Test "Imaginary part of: cacos (1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Imaginary part of: cacos (1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: cacos (1.5 + 0x1.fp-1025 i)":
@@ -1134,12 +1126,8 @@ ldouble: 1
# cacosh
Test "Real part of: cacosh (+0 + 0.5 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (+0 + 1.0 i)":
double: 1
float: 1
@@ -1149,12 +1137,8 @@ Test "Real part of: cacosh (+0 + 1.5 i)":
double: 1
idouble: 1
Test "Real part of: cacosh (+0 - 0.5 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (+0 - 1.0 i)":
double: 1
float: 1
@@ -1164,12 +1148,8 @@ Test "Real part of: cacosh (+0 - 1.5 i)":
double: 1
idouble: 1
Test "Real part of: cacosh (-0 + 0.5 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (-0 + 1.0 i)":
double: 1
float: 1
@@ -1179,12 +1159,8 @@ Test "Real part of: cacosh (-0 + 1.5 i)":
double: 1
idouble: 1
Test "Real part of: cacosh (-0 - 0.5 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (-0 - 1.0 i)":
double: 1
float: 1
@@ -1217,11 +1193,6 @@ idouble: 1
Test "Imaginary part of: cacosh (-0.25 - 1.0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cacosh (-0.5 + +0 i)":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (-0.5 + 0x1.fp-1025 i)":
ildouble: 1
ldouble: 1
@@ -1247,11 +1218,6 @@ ldouble: 1
Test "Imaginary part of: cacosh (-0.5 + 1.0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cacosh (-0.5 - 0 i)":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: cacosh (-0.5 - 0x1.fp-1025 i)":
ildouble: 1
ldouble: 1
@@ -1546,10 +1512,6 @@ Test "Real part of: cacosh (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (-1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (-1.5 + 0x1.fp-1025 i)":
@@ -1562,10 +1524,6 @@ Test "Real part of: cacosh (-1.5 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (-1.5 - 0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (-1.5 - 0x1.fp-1025 i)":
@@ -1577,18 +1535,6 @@ ldouble: 1
Test "Real part of: cacosh (-1.5 - 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cacosh (-2 - 3 i)":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-ildouble: 6
-ldouble: 6
-Test "Imaginary part of: cacosh (-2 - 3 i)":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
Test "Real part of: cacosh (0.0 + 0x0.fffffffffffff8p0 i)":
ildouble: 1
ldouble: 1
@@ -1739,9 +1685,6 @@ idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: cacosh (0.75 + 1.25 i)":
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: cacosh (0.75 + 1.25 i)":
float: 1
ifloat: 1
@@ -2098,10 +2041,6 @@ Test "Real part of: cacosh (1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (1.5 + 0x1.fp-1025 i)":
@@ -2114,10 +2053,6 @@ Test "Real part of: cacosh (1.5 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (1.5 - 0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (1.5 - 0x1.fp-1025 i)":
@@ -2132,31 +2067,19 @@ ldouble: 1
# casin
Test "Imaginary part of: casin (+0 + 0.5 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (+0 + 1.0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: casin (+0 + 1.5 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: casin (+0 - 0.5 i)":
double: 1
-float: 1
idouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i)":
+float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (+0 - 1.0 i)":
double: 1
float: 1
@@ -2166,31 +2089,19 @@ Test "Imaginary part of: casin (+0 - 1.5 i)":
double: 1
idouble: 1
Test "Imaginary part of: casin (-0 + 0.5 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (-0 + 1.0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: casin (-0 + 1.5 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: casin (-0 - 0.5 i)":
double: 1
-float: 1
idouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i)":
+float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (-0 - 1.0 i)":
double: 1
float: 1
@@ -2460,15 +2371,9 @@ idouble: 1
Test "Imaginary part of: casin (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: casin (-0x1.fp-16385 + 1.5 i)":
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: casin (-0x1.fp-16385 - 1.5 i)":
-ildouble: 1
-ldouble: 1
Test "Real part of: casin (-0x1.fp-30 + 1.0 i)":
ildouble: 1
ldouble: 1
@@ -2640,10 +2545,6 @@ Test "Imaginary part of: casin (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Imaginary part of: casin (-1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: casin (-1.5 + 0x1.fp-1025 i)":
@@ -2749,16 +2650,11 @@ ildouble: 1
ldouble: 1
Test "Real part of: casin (0.75 + 1.25 i)":
double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 3
-ldouble: 3
-Test "Imaginary part of: casin (0.75 + 1.25 i)":
float: 1
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
@@ -2940,15 +2836,9 @@ idouble: 1
Test "Imaginary part of: casin (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: casin (0x1.fp-16385 + 1.5 i)":
-ildouble: 1
-ldouble: 1
Test "Imaginary part of: casin (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: casin (0x1.fp-16385 - 1.5 i)":
-ildouble: 1
-ldouble: 1
Test "Real part of: casin (0x1.fp-30 + 1.0 i)":
ildouble: 1
ldouble: 1
@@ -3128,10 +3018,6 @@ Test "Imaginary part of: casin (1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Imaginary part of: casin (1.5 + +0 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: casin (1.5 + 0x1.fp-1025 i)":
@@ -3164,17 +3050,9 @@ Test "Real part of: casinh (+0 - 1.5 i)":
ildouble: 1
ldouble: 1
Test "Real part of: casinh (-0 + 1.5 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Real part of: casinh (-0 - 1.5 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Test "Imaginary part of: casinh (-0.0 + 0x0.ffffffp0 i)":
@@ -3196,12 +3074,8 @@ Test "Imaginary part of: casinh (-0.25 - 1.0 i)":
double: 1
idouble: 1
Test "Real part of: casinh (-0.5 + +0 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -3244,12 +3118,8 @@ Test "Imaginary part of: casinh (-0.5 + 1.0 i)":
ildouble: 1
ldouble: 1
Test "Real part of: casinh (-0.5 - 0 i)":
-double: 2
float: 1
-idouble: 2
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -3508,12 +3378,10 @@ Test "Real part of: casinh (-0x1p-63 - 0x1.0000000000000002p0 i)":
ildouble: 2
ldouble: 2
Test "Real part of: casinh (-1.0 + +0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: casinh (-1.0 + 0.25 i)":
ildouble: 1
ldouble: 1
@@ -3577,12 +3445,10 @@ Test "Imaginary part of: casinh (-1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Real part of: casinh (-1.0 - 0 i)":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
Test "Imaginary part of: casinh (-1.0 - 0.25 i)":
ildouble: 1
ldouble: 1
@@ -3646,47 +3512,26 @@ Test "Imaginary part of: casinh (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
Test "Real part of: casinh (-1.5 + +0 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+double: 1
+idouble: 1
Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)":
double: 1
idouble: 1
Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)":
double: 1
idouble: 1
-Test "Imaginary part of: casinh (-1.5 + 0x1.fp-16385 i)":
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (-1.5 - 0 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+double: 1
+idouble: 1
Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)":
double: 1
idouble: 1
Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)":
double: 1
idouble: 1
-Test "Imaginary part of: casinh (-1.5 - 0x1.fp-16385 i)":
+Test "Imaginary part of: casinh (-2 - 3 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: casinh (-2 - 3 i)":
-double: 6
-float: 19
-idouble: 6
-ifloat: 19
-ildouble: 5
-ldouble: 5
-Test "Imaginary part of: casinh (-2 - 3 i)":
-double: 13
-float: 6
-idouble: 13
-ifloat: 6
-ildouble: 6
-ldouble: 6
Test "Imaginary part of: casinh (0.0 + 0x0.ffffffp0 i)":
ildouble: 1
ldouble: 1
@@ -3706,12 +3551,8 @@ Test "Imaginary part of: casinh (0.25 - 1.0 i)":
double: 1
idouble: 1
Test "Real part of: casinh (0.5 + +0 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (0.5 + 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -3754,12 +3595,8 @@ Test "Imaginary part of: casinh (0.5 + 1.0 i)":
ildouble: 1
ldouble: 1
Test "Real part of: casinh (0.5 - 0 i)":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (0.5 - 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -4180,9 +4017,6 @@ idouble: 1
Test "Real part of: casinh (1.5 + 0x1.fp-129 i)":
double: 1
idouble: 1
-Test "Imaginary part of: casinh (1.5 + 0x1.fp-16385 i)":
-ildouble: 1
-ldouble: 1
Test "Real part of: casinh (1.5 - 0 i)":
double: 1
idouble: 1
@@ -4192,9 +4026,6 @@ idouble: 1
Test "Real part of: casinh (1.5 - 0x1.fp-129 i)":
double: 1
idouble: 1
-Test "Imaginary part of: casinh (1.5 - 0x1.fp-16385 i)":
-ildouble: 1
-ldouble: 1
# catan
Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)":
@@ -4347,11 +4178,7 @@ ildouble: 1
ldouble: 1
Test "Real part of: catanh (-2 - 3 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
Test "Real part of: catanh (0.75 + 1.25 i)":
double: 1
idouble: 1
@@ -4403,2029 +4230,4634 @@ ildouble: 1
ldouble: 1
# cbrt
-Test "cbrt (-0.001)":
+Test "cbrt (-0x4.189374bc6a7ef9d8p-12)":
ildouble: 1
ldouble: 1
-Test "cbrt (0.9921875)":
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+Test "cbrt (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "cbrt (-0x8p-152)":
+double: 1
+idouble: 1
+Test "cbrt (0x1.86ap+16)":
+double: 1
+idouble: 1
+Test "cbrt (0x4p-1024)":
+double: 1
+idouble: 1
+Test "cbrt (0x8p-152)":
+double: 1
+idouble: 1
+Test "cbrt (0xf.ep-4)":
ildouble: 1
ldouble: 1
# ccos
-Test "Real part of: ccos (-2 - 3 i)":
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+
+# cexp
+Test "Real part of: cexp (-0x2.71p+12 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (-0x2.71p+12 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (-0x2.c6ap+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x2.c5c9p+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+
+# clog
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (-2 - 3 i)":
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Real part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.0000000000000012p+0 + +0 i)":
ildouble: 1
ldouble: 1
-
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i)":
+Test "Real part of: clog (0x1.0000000000000012p+0 + 0x1.234566p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000012p+0 + 0x1.23456789p-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000012p+0 + 0x1.23456789p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000012p+0 + 0x1.234568p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000012p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000014p+0 + 0x1.234566p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000014p+0 + 0x1.23456789p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000000014p+0 + 0x1.234568p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "Real part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x1.234p-100 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
ildouble: 1
ldouble: 1
-
-# cexp
-Test "Real part of: cexp (-10000 + 0x1p16383 i)":
+Test "Imaginary part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c638bcfe0ep-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (-2.0 - 3.0 i)":
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.48e45ep-4 + 0xf.f2c638bcfe0ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: cexp (-95 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.48e46p-4 + 0xf.f2c638bcfe0ep-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i)":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cexp (0.75 + 1.25 i)":
-float: 1
-ifloat: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bep-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (11356.5625 + 0.75 i)":
+Test "Real part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdfbf7p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i)":
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf6p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i)":
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf7p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed199p-4 i)":
ildouble: 1
ldouble: 1
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bep-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bep-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x0.ffffffffffffffffp0 + 0x0.ffffffffffffffffp-15000 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4d1d7a6e1p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Real part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4ep-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-100 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1p+16383 i)":
+Test "Real part of: clog (0x1p-16440 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7b8p-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.2d04p-8 + 0xf.ffda2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.2cdb84p-4 + 0xf.ae888f0455f6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb84p-4 + 0xf.ae888f0455f6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb84p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb88p-4 + 0xf.ae888f0455f6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb88p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x1.fp+16383 + 0x1p+16383 i)":
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab873d09e61e798p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x11682p-23 + 0x7ffed1p-23 i)":
+Test "Real part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61e797p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x2dd46725bp-35 + 0x7783a1284p-35 i)":
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61e8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x602fd5037c4792efp-64 + 0xed3e2086dcca80b8p-64 i)":
+Test "Imaginary part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873d09e61e798p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)":
+Test "Imaginary part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+Test "Real part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab874p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xa1f2c1p-24 + 0xc643aep-24 i)":
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e797p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xa4722f19346cp-51 + 0x7f9631c5e7f07p-51 i)":
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
float: 1
ifloat: 1
-
-# clog10
-Test "Imaginary part of: clog10 (-0 + inf i)":
+Test "Imaginary part of: clog (0x3.3b8f9p-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9p-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9p-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (-0 - inf i)":
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d12p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d12p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Imaginary part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (-0x1.234566p-40 - 1.0 i)":
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d619a8d12p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)":
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog10 (-2 - 3 i)":
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (-3 + inf i)":
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (-3 - inf i)":
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 1 i)":
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1ad688p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1ad688p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c2p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (-inf + inf i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d758p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (-inf - 0 i)":
+Test "Imaginary part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 1 i)":
+Test "Imaginary part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017ap-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.d9e8c415d5644p-4 + 0xf.3f302p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (0 + inf i)":
+Test "Imaginary part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4.d9e8cp-4 + 0xf.3f302p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (0 - inf i)":
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22364p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363bf989d9b5cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c6p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.b06b680ea2ccp-4 + 0xe.f452b965da9fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog10 (0.75 + 1.25 i)":
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0.75 + 1.25 i)":
+Test "Imaginary part of: clog (0x5.ba8ce4b6p-4 + 0xe.f0742508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.ba8cep-4 + 0xe.f0743p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e2086dcca80b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e21p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4794p-4 + 0xe.d3e2086dcca8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2086dcca80b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2086dcca80b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
double: 1
idouble: 1
-ildouble: 2
-ldouble: 2
-Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)":
+Test "Imaginary part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x0.ffffffffffffffffp0 + 0x0.ffffffffffffffffp-15000 i)":
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca80b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca80b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x6.02fd5p-4 + 0xe.d3e2086dcca80b8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2018b428257p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2018b428258p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2018b4288p-4 i)":
double: 1
idouble: 1
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)":
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c3p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x1.234566p-30 + 1.0 i)":
+Test "Imaginary part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c3p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)":
+Test "Imaginary part of: clog (0x6.1c643068cd125efp-4 + 0xe.c97c2018b4288p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
+Test "Real part of: clog (0x6.1c643068cd125efp-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2018b428258p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)":
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428258p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x1p-16440 + 0x1p-16441 i)":
+Test "Imaginary part of: clog (0x6.1c6438p-4 + 0xe.c97c2p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+Test "Imaginary part of: clog (0x6.1c643p-4 + 0xe.c97c2018b428257p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)":
+Test "Imaginary part of: clog (0x6.1c643p-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86bbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86baf8fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
-float: 1
-ifloat: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86baf9p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a6p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)":
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)":
+Test "Imaginary part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff8p-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff8p-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff8p-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff8p-4 + 0xe.c36a599a86baf9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff8p-4 + 0xe.c36a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog (0x6.b10b48p-4 + 0xe.8893cp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x4d4ep-15 + 0x6605p-15 i)":
+Test "Real part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520217b6p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520217b6p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b5p-4 + 0xe.8893cp-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+Test "Imaginary part of: clog (0x6.b10b5p-4 + 0xe.8893dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (0x659b70ab7971bp-53 + 0x1f5d111e08abecp-53 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x659feap-24 + 0xeaf6f9p-24 i)":
+Test "Real part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)":
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x81b7efa81fc35ad1p-65 + 0x1ef4b835f1c79d812p-65 i)":
+Test "Real part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a95p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e511p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e511p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0xa1f2c1p-24 + 0xc643aep-24 i)":
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a95p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0xa4722f19346cp-51 + 0x7f9631c5e7f07p-51 i)":
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)":
+Test "Real part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160b311p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)":
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)":
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d66p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog10 (3 + inf i)":
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (3 - inf i)":
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f4b083cb0bp-4 + 0xd.e1bf1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f4b083cb0bp-4 + 0xd.e1bf1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f4b088p-4 + 0xd.e1bfp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (inf + inf i)":
+Test "Imaginary part of: clog (0x8.88fae2eap-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog10 (inf - inf i)":
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-
-# cos
-Test "cos (M_PI_6l * 2.0)":
+Test "Imaginary part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.479468b09a37p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos (M_PI_6l * 4.0)":
-double: 2
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47947p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b4085cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b408p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9318p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9318p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b969p-4 + 0xc.b9317c470b4085cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b969p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317c470b408p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fp-4 + 0xc.b9317c470b408p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fp-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
float: 1
-idouble: 2
ifloat: 1
+Test "Imaginary part of: clog (0x9.b386fp-4 + 0xc.b9318p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.b387p-4 + 0xc.b9317c470b4085cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b387p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7c8b1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53ep-4 i)":
ildouble: 1
ldouble: 1
-Test "cos (pi/2)":
+Test "Real part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
ildouble: 1
ldouble: 1
-
-# cos_downward
-Test "cos_downward (1)":
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_downward (10)":
+Test "Imaginary part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53de1d5a7dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8b1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
double: 1
-float: 1
idouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
+float: 1
ifloat: 1
-Test "cos_downward (3)":
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6bp-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53de1d5a7dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.1f2c1p-4 + 0xc.643aep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
double: 1
idouble: 1
-Test "cos_downward (4)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df8p-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_downward (5)":
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e262434p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc57p-4 + 0xb.e8679p-4 i)":
float: 1
ifloat: 1
-Test "cos_downward (7)":
+Test "Imaginary part of: clog (0xa.afc57p-4 + 0xb.e867ap-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (8)":
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (9)":
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
+float: 1
ifloat: 1
+Test "Imaginary part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
ildouble: 1
ldouble: 1
-
-# cos_towardzero
-Test "cos_towardzero (1)":
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6058p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (10)":
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (2)":
+Test "Real part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f2405504a6058p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6058p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (3)":
+Test "Real part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (4)":
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
double: 1
idouble: 1
-Test "cos_towardzero (5)":
+Test "Imaginary part of: clog (0xb.263a77543bp-4 + 0xb.79c9bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9a417bb8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9ap-4 i)":
float: 1
ifloat: 1
-Test "cos_towardzero (7)":
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9bp-4 i)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "cos_towardzero (8)":
-double: 1
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
float: 1
-idouble: 1
ifloat: 1
-
-# cos_upward
-Test "cos_upward (1)":
+Test "Imaginary part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
float: 1
ifloat: 1
-Test "cos_upward (10)":
ildouble: 1
ldouble: 1
-Test "cos_upward (2)":
+Test "Real part of: clog (0xf.8p+16380 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xf.8p+16380 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xf.ffffffffffff8p-4 + 0x8p-152 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+Test "Real part of: clog (0xf.fffffffffffffffp-4 + +0 i)":
ildouble: 1
ldouble: 1
-Test "cos_upward (3)":
+Test "Real part of: clog (0xf.fffffffffffffffp-4 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffffffffffffp-4 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffffffffffffp-4 + 0xf.fffffffffffffffp-15004 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
float: 1
ifloat: 1
+
+# clog10
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
ildouble: 1
ldouble: 1
-Test "cos_upward (4)":
+Test "Imaginary part of: clog10 (-0x1.234566p-40 - 1.0 i)":
double: 1
idouble: 1
-Test "cos_upward (5)":
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-inf + inf i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0.75 + 1.25 i)":
double: 1
idouble: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)":
ildouble: 1
ldouble: 1
-Test "cos_upward (6)":
-double: 1
+Test "Real part of: clog10 (0x0.ffffffffffffffffp0 + 0x0.ffffffffffffffffp-15000 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_upward (7)":
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)":
double: 1
idouble: 1
-Test "cos_upward (8)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x1.234566p-30 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-
-# cosh_downward
-Test "cosh_downward (22)":
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)":
double: 1
-float: 1
idouble: 1
+Test "Real part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x1p-16440 + 0x1p-16441 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+float: 1
ifloat: 1
-Test "cosh_downward (23)":
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_downward (24)":
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# cosh_towardzero
-Test "cosh_towardzero (22)":
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "cosh_towardzero (23)":
+Test "Imaginary part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)":
double: 1
-float: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x4d4ep-15 + 0x6605p-15 i)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_towardzero (24)":
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x659b70ab7971bp-53 + 0x1f5d111e08abecp-53 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x659feap-24 + 0xeaf6f9p-24 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x81b7efa81fc35ad1p-65 + 0x1ef4b835f1c79d812p-65 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog10 (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0xa1f2c1p-24 + 0xc643aep-24 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# cosh_upward
-Test "cosh_upward (22)":
+Test "Imaginary part of: clog10 (0xa4722f19346cp-51 + 0x7f9631c5e7f07p-51 i)":
ildouble: 1
ldouble: 1
-Test "cosh_upward (24)":
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)":
+ildouble: 1
+ldouble: 1
+
+# cos
+Test "cos (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+
+# cos_tonearest
+Test "cos_tonearest (0x1.0000010b239a9p+0)":
double: 1
idouble: 1
# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
-float: 1
-ifloat: 1
+Test "Real part of: cpow (0x2p+0 + +0 i, 0xap+0 + +0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 5
+ifloat: 5
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
-float: 3
-ifloat: 3
-ildouble: 9
-ldouble: 9
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + +0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i)":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i)":
-float: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
double: 1
float: 3
idouble: 1
ifloat: 3
-ildouble: 15
-ldouble: 15
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
-float: 1
-ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
+float: 3
+ifloat: 3
ildouble: 1
ldouble: 1
-Test "Real part of: cpow (2 + 0 i, 10 + 0 i)":
-ildouble: 5
-ldouble: 5
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
-double: 1
+Test "Imaginary part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
float: 1
-idouble: 1
ifloat: 1
-ildouble: 4
-ldouble: 4
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 6
-ifloat: 6
-ildouble: 2
-ldouble: 2
-Test "Real part of: cpow (e + 0 i, 0 + 2 * M_PIl i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i)":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
ildouble: 1
ldouble: 1
# csin
-Test "Real part of: csin (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csin (-2 - 3 i)":
-float: 1
-ifloat: 1
Test "Real part of: csin (0.75 + 1.25 i)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csin (0.75 + 1.25 i)":
-float: 1
-ifloat: 1
# csinh
-Test "Real part of: csinh (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (-2 - 3 i)":
-float: 1
-ifloat: 1
Test "Real part of: csinh (0.75 + 1.25 i)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csinh (0.75 + 1.25 i)":
-float: 1
-ifloat: 1
# csqrt
-Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i)":
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
+Test "Real part of: csqrt (-0x4.0000000000004p-1024 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (-0x4p-1076 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (0x1p-5000 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i)":
+Test "Imaginary part of: csqrt (0x2p-148 + 0x2p-148 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)":
+Test "Real part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000004p-1024 + 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: csqrt (0x4p-1076 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16448 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-1076 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-16448 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + +0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)":
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-1073 + 0x1p-1073 i)":
+
+# ctan
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-1074 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-147 + 0x1p-147 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-149 + 0x1p-149 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: ctan (-2 - 3 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x2.dp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x2.fp+4 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x1p1023 + 1 i)":
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0x1p127 + 1 i)":
+Test "Real part of: ctan (0x8p+124 + 0x1p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctan (0x1p127 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0x1p16383 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-Test "Real part of: ctan (1 + 45 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (1 + 47 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: ctan (1 + 5680 i)":
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
# ctan_downward
-Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
-ildouble: 1
-ldouble: 1
-Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
-double: 3
-idouble: 3
+Test "Real part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)":
float: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
-double: 3
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
float: 1
-idouble: 3
ifloat: 1
-
-# ctan_tonearest
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
-float: 1
-ifloat: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-
-# ctan_towardzero
-Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
double: 3
idouble: 3
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
-float: 1
-ifloat: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + +0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-ildouble: 4
-ldouble: 4
-
-# ctan_upward
-Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_downward (0x1p+0 + 0x1.63p+8 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_downward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1p+0 + 0x2.dp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
double: 1
idouble: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)":
double: 1
-float: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_downward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-ildouble: 8
-ldouble: 8
-
-# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
+Test "Real part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)":
+
+# ctan_tonearest
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
-double: 1
-idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (1 + 0x1p127 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "Real part of: ctanh (1 + 0x1p16383 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (45 + 1 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (47 + 1 i)":
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: ctanh (5680 + 1 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_downward
-Test "Real part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
-double: 3
-idouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
-double: 3
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
-idouble: 3
ifloat: 1
-Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "Real part of: ctanh_downward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.dp+4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
-float: 1
-ifloat: 1
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Real part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_towardzero
-Test "Real part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
-double: 3
-idouble: 3
+Test "Imaginary part of: ctan_tonearest (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
-float: 1
-ifloat: 1
-ildouble: 4
-ldouble: 4
-Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh_towardzero (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_upward
-Test "Real part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+
+# ctan_towardzero
+Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
double: 1
+float: 2
idouble: 1
-ildouble: 8
-ldouble: 8
-Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Real part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
-ildouble: 1
-ldouble: 1
-
-# erfc
-Test "erfc (0.75)":
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)":
float: 1
ifloat: 1
-Test "erfc (0x1.f7303cp+1)":
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "erfc (0x1.ffa002p+2)":
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 3
+idouble: 3
ildouble: 1
ldouble: 1
-Test "erfc (0x1.ffffc8p+2)":
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 3
+idouble: 3
ildouble: 1
ldouble: 1
-Test "erfc (1.25)":
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "erfc (2.0)":
-float: 1
-ifloat: 1
-Test "erfc (4.125)":
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# exp_downward
-Test "exp_downward (1)":
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "exp_downward (2)":
-double: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "exp_downward (3)":
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-
-# exp_towardzero
-Test "exp_towardzero (1)":
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)":
ildouble: 1
ldouble: 1
-Test "exp_towardzero (2)":
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "exp_towardzero (3)":
+Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-
-# exp_upward
-Test "exp_upward (1)":
+Test "Imaginary part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-
-# expm1
-Test "expm1 (1)":
ildouble: 1
ldouble: 1
-
-# gamma
-Test "gamma (-0.5)":
+Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "gamma (0.5)":
+Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (0.7)":
+Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
float: 1
ifloat: 1
-Test "gamma (1.2)":
+ildouble: 1
+ldouble: 1
+
+# ctan_upward
+Test "Real part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 2
idouble: 1
ifloat: 2
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (3)":
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4)":
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + +0 i)":
float: 1
ifloat: 1
-Test "hypot (-0.7, 12.4)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "hypot (-12.4, -0.7)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-12.4, 0.7)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + +0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 7
+ldouble: 7
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 7
+ldouble: 7
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + +0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (0.7, -12.4)":
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 7
+ldouble: 7
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (0.7, 12.4)":
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (0x1p-16445, 0x1p-16445)":
-ldouble: 1
-Test "hypot (12.4, -0.7)":
+ildouble: 7
+ldouble: 7
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63ap+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (12.4, 0.7)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# j0
-Test "j0 (-0x1.001000001p+593)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
ildouble: 2
ldouble: 2
-Test "j0 (-4.0)":
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "j0 (0.75)":
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "j0 (0x1.d7ce3ap+107)":
-float: 2
-ifloat: 2
-Test "j0 (0x1p1023)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
double: 1
+float: 1
idouble: 1
-Test "j0 (0x1p16382)":
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "j0 (1.5)":
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "j0 (10.0)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
double: 1
idouble: 1
-Test "j0 (4.0)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "j0 (8.0)":
-float: 1
-ifloat: 1
-
-# j1
-Test "j1 (-1.0)":
-float: 1
-ifloat: 1
-Test "j1 (0x1.3ffp+74)":
+Test "Real part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "j1 (0x1p16382)":
+Test "Real part of: ctan_upward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "j1 (1.0)":
-float: 1
-ifloat: 1
-Test "j1 (1.5)":
+Test "Imaginary part of: ctan_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "j1 (10.0)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "j1 (2.0)":
-float: 1
-ifloat: 1
-Test "j1 (8.0)":
+Test "Imaginary part of: ctan_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# jn
-Test "jn (0, -4.0)":
+Test "Imaginary part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (0, 0.75)":
-float: 1
-ifloat: 1
-Test "jn (0, 1.5)":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "jn (0, 4.0)":
-float: 1
-ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (0, 8.0)":
+Test "Real part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)":
+float: 3
+ifloat: 3
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)":
float: 1
ifloat: 1
-Test "jn (1, -1.0)":
+ildouble: 1
+ldouble: 1
+
+# ctanh
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
-Test "jn (1, 1.0)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "jn (1, 1.5)":
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "jn (1, 2.0)":
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "jn (1, 8.0)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+124 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "jn (10, -1.0)":
-float: 2
-ifloat: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "jn (10, 0.125)":
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
-Test "jn (10, 0.75)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "Imaginary part of: ctanh (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x2.fp+4 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "jn (10, 1.0)":
-float: 2
-ifloat: 2
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
ildouble: 1
ldouble: 1
-Test "jn (10, 10.0)":
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
-float: 5
idouble: 1
-ifloat: 5
-ildouble: 2
-ldouble: 2
-Test "jn (10, 2.0)":
-float: 3
-ifloat: 3
ildouble: 1
ldouble: 1
-Test "jn (2, 0x1.ffff62p+99)":
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (2, 2.4048255576957729)":
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (3, -1.0)":
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
ildouble: 1
ldouble: 1
-Test "jn (3, 1.0)":
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# ctanh_downward
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c8p-4 i)":
ildouble: 1
ldouble: 1
-Test "jn (3, 10.0)":
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdbp-4 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
ildouble: 1
ldouble: 1
-Test "jn (3, 2.0)":
+Test "Imaginary part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x1.63p+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "jn (3, 2.4048255576957729)":
-float: 2
-ifloat: 2
+Test "Imaginary part of: ctanh_downward (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "jn (4, 2.4048255576957729)":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (5, 2.4048255576957729)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-ildouble: 3
-ldouble: 3
-Test "jn (6, 2.4048255576957729)":
-float: 4
-ifloat: 4
ildouble: 1
ldouble: 1
-Test "jn (7, 2.4048255576957729)":
-float: 5
-ifloat: 5
-Test "jn (8, 2.4048255576957729)":
-float: 4
-ifloat: 4
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "jn (9, 2.4048255576957729)":
-float: 3
-ifloat: 3
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-
-# lgamma
-Test "lgamma (-0.5)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "lgamma (0.5)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "lgamma (0.7)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "lgamma (1.2)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-Test "lgamma (3)":
+Test "Imaginary part of: ctanh_downward (0x2.dp+4 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-
-# log
-Test "log (0.75)":
+Test "Imaginary part of: ctanh_downward (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "log (2)":
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "log (e)":
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
-
-# log10
-Test "log10 (0.75)":
-ildouble: 2
-ldouble: 2
-Test "log10 (e)":
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# log1p
-Test "log1p (-0.25)":
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-
-# log2
-Test "log2 (0.75)":
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
ildouble: 1
ldouble: 1
-
-# pow
-Test "pow (0.75, 1.25)":
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
ildouble: 1
ldouble: 1
-Test "pow (0x0.ffffffp0, -0x1p24)":
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "pow (0x0.ffffffp0, 0x1p24)":
+Test "Imaginary part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
-Test "pow (0x1p64, 0.125)":
ildouble: 1
ldouble: 1
-Test "pow (256, 8)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-ildouble: 7
-ldouble: 7
-
-# pow_downward
-Test "pow_downward (1.0625, 1.125)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "pow_downward (1.5, 1.03125)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# pow_towardzero
-Test "pow_towardzero (1.0625, 1.125)":
-double: 1
-idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "pow_towardzero (1.5, 1.03125)":
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-
-# pow_upward
-Test "pow_upward (1.0625, 1.125)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x2.dp+4 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "pow_upward (1.5, 1.03125)":
+Test "Imaginary part of: ctanh_tonearest (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
ildouble: 1
ldouble: 1
-
-# sin_downward
-Test "sin_downward (1)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-Test "sin_downward (10)":
-double: 1
-idouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 1
ldouble: 1
-Test "sin_downward (2)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-Test "sin_downward (3)":
ildouble: 1
ldouble: 1
-Test "sin_downward (4)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d18p+0 i)":
ildouble: 1
ldouble: 1
-Test "sin_downward (5)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (6)":
-double: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# ctanh_towardzero
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)":
float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
idouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (7)":
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234p-4 i)":
ildouble: 1
ldouble: 1
-Test "sin_downward (8)":
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168cp-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (9)":
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdbp-4 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
ildouble: 1
ldouble: 1
-
-# sin_towardzero
-Test "sin_towardzero (1)":
+Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_towardzero (10)":
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_towardzero (2)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1.63p+8 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1.6dp+8 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
-Test "sin_towardzero (3)":
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (4)":
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
-Test "sin_towardzero (5)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
-Test "sin_towardzero (7)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (8)":
+Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 3
+idouble: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (9)":
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
-float: 1
+float: 2
idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
ifloat: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 3
+idouble: 3
ildouble: 1
ldouble: 1
-
-# sin_upward
-Test "sin_upward (1)":
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "sin_upward (10)":
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_upward (2)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_upward (3)":
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "sin_upward (4)":
+Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_upward (5)":
+
+# ctanh_upward
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
-Test "sin_upward (7)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdbp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 + 0xc.35p+12 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "sin_upward (8)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# sincos
-Test "sincos (M_PI_6l*2.0) extra output 1":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63ap+12 + 0x1p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
+Test "Real part of: ctanh_upward (0x1.63p+12 + 0x1p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sincos (pi/2) extra output 2":
+Test "Real part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-
-# sinh
-Test "sinh (0.75)":
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
ildouble: 1
ldouble: 1
-
-# sinh_downward
-Test "sinh_downward (22)":
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_downward (23)":
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
double: 1
-float: 1
idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_downward (24)":
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)":
+float: 3
+ifloat: 3
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# sinh_towardzero
-Test "sinh_towardzero (22)":
+Test "Real part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "sinh_towardzero (23)":
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 7
+ldouble: 7
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 7
+ldouble: 7
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_towardzero (24)":
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# sinh_upward
-Test "sinh_upward (24)":
-double: 1
-idouble: 1
-
-# tan
-Test "tan (0.75)":
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
ildouble: 1
ldouble: 1
-Test "tan (pi/4)":
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-
-# tan_downward
-Test "tan_downward (1)":
+ildouble: 7
+ldouble: 7
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tan_downward (10)":
+ildouble: 7
+ldouble: 7
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb4p+0 i)":
ildouble: 1
ldouble: 1
-Test "tan_downward (2)":
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 + 0xc.35p+12 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tan_downward (3)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 - 0xc.35p+12 i)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (4)":
+Test "Real part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# erf
+Test "erf (-0x8p-4)":
ildouble: 1
ldouble: 1
-Test "tan_downward (5)":
+
+# erfc
+Test "erfc (0x1.4p+0)":
ildouble: 1
ldouble: 1
-Test "tan_downward (6)":
-double: 1
+Test "erfc (0x2p+0)":
+float: 1
+ifloat: 1
+Test "erfc (0x3.ee6078p+0)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x4.2p+0)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x6.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fe8008p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fffd58p+0)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fffd59e26af37bc8p+0)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fffd59e26af37bcp+0)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fffd6p+0)":
float: 1
+ifloat: 1
+Test "erfc (0x7.ffff2p+0)":
+ildouble: 1
+ldouble: 1
+
+# expm1
+Test "expm1 (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+
+# gamma
+Test "gamma (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x4p-32)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1.3333333333334p+0)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1p-40)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+
+# hypot
+Test "hypot (-0xb.3333333333338p-4, -0xc.6666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, 0xc.6666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
idouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdef02p-500, 0x1.23456789abcdefp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdefp-500, 0x1.23456789abcdef02p-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdefp-500, 0x1.23456789abcdfp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdfp-500, 0x1.23456789abcdefp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, -0xc.6666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, 0xc.6666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+
+# j0
+Test "j0 (-0x2.002000002p+592)":
+ildouble: 2
+ldouble: 2
+Test "j0 (-0x4p+0)":
+float: 1
ifloat: 1
-Test "tan_downward (7)":
+ildouble: 2
+ldouble: 2
+Test "j0 (-0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
-Test "tan_downward (8)":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "j0 (0x1.8p+0)":
float: 1
ifloat: 1
-Test "tan_downward (9)":
+Test "j0 (0x4p+0)":
float: 1
ifloat: 1
-
-# tan_towardzero
-Test "tan_towardzero (1)":
+ildouble: 2
+ldouble: 2
+Test "j0 (0x4p+16380)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x8p+0)":
+float: 1
+ifloat: 1
+Test "j0 (0x8p+1020)":
+double: 1
+idouble: 1
+Test "j0 (0xap+0)":
+double: 1
+idouble: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+Test "j0 (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tan_towardzero (10)":
+ildouble: 1
+ldouble: 1
+
+# j1
+Test "j1 (0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "j1 (0x2p+0)":
+float: 1
+ifloat: 1
+Test "j1 (0x4.ffcp+72)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (2)":
+Test "j1 (0x4p+16380)":
ildouble: 1
ldouble: 1
-Test "tan_towardzero (3)":
+Test "j1 (0xap+0)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
+# jn
+Test "jn (0, -0x4p+0)":
float: 1
ifloat: 1
-Test "tan_towardzero (4)":
+ildouble: 2
+ldouble: 2
+Test "jn (0, 0x1.8p+0)":
float: 1
ifloat: 1
+Test "jn (0, 0x4p+0)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "jn (0, 0x8p+0)":
+float: 1
+ifloat: 1
+Test "jn (0, 0xap+0)":
+double: 1
+idouble: 1
+Test "jn (1, 0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x2p+0)":
+float: 1
+ifloat: 1
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
ildouble: 1
ldouble: 1
-Test "tan_towardzero (5)":
-double: 1
+Test "jn (10, -0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x2p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x2p-4)":
float: 1
+ifloat: 1
+Test "jn (10, 0xap+0)":
+double: 1
+float: 2
idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (10, 0xcp-4)":
+float: 1
ifloat: 1
-Test "tan_towardzero (6)":
+ildouble: 2
+ldouble: 2
+Test "jn (2, 0x2.67a2a4p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e36801p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
ildouble: 1
ldouble: 1
-Test "tan_towardzero (7)":
+Test "jn (2, 0x2.67a2a8p+0)":
double: 1
idouble: 1
-Test "tan_towardzero (8)":
+ildouble: 2
+ldouble: 2
+Test "jn (2, 0x8p+1020)":
double: 1
idouble: 1
+Test "jn (2, 0x8p+124)":
ildouble: 1
ldouble: 1
-Test "tan_towardzero (9)":
+Test "jn (2, 0xf.fffb1p+96)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-
-# tan_upward
-Test "tan_upward (1)":
+Test "jn (3, -0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a4p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
ildouble: 1
ldouble: 1
-Test "tan_upward (10)":
+Test "jn (3, 0x2.67a2a8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tan_upward (2)":
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (3)":
+Test "jn (3, 0x2p+0)":
float: 1
ifloat: 1
-Test "tan_upward (4)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0xap+0)":
double: 1
idouble: 1
-Test "tan_upward (5)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a4p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (4, 0x2.67a2a5d2e36801p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tan_upward (6)":
ildouble: 1
ldouble: 1
-Test "tan_upward (7)":
+Test "jn (5, 0x2.67a2a4p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (5, 0x2.67a2a5d2e36801p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a4p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e36801p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (7, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (7, 0x2.67a2a5d2e36801p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e3682p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a8p+0)":
float: 1
ifloat: 1
+Test "jn (8, 0x2.67a2a4p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (8)":
+Test "jn (9, 0x2.67a2a4p+0)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
double: 1
idouble: 1
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
ildouble: 1
ldouble: 1
-Test "tan_upward (9)":
+Test "jn (9, 0x2.67a2a8p+0)":
double: 1
idouble: 1
+ildouble: 3
+ldouble: 3
+
+# lgamma
+Test "lgamma (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x4p-32)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x8p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1.3333333333334p+0)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1p-40)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.33333p-4)":
ildouble: 1
ldouble: 1
-# tgamma
-Test "tgamma (-0.5)":
+# pow
+Test "pow (-0x2p+0, -0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow (-0x2p+0, -0x7.fp+4)":
+ifloat: 7
+Test "pow (-0x2p+0, 0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow (-0x8p-4, -0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow (-0x8p-4, 0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow (-0x8p-4, 0x7.fp+4)":
+ifloat: 7
+Test "pow (0x1p+64, 0x2p-4)":
+ildouble: 1
+ldouble: 1
+Test "pow (0x1p+8, 0x8p+0)":
+float: 1
+ifloat: 1
+ildouble: 7
+ldouble: 7
+Test "pow (0xf.ffffffffffff8p+1020, 0xcp-4)":
double: 1
+idouble: 1
+Test "pow (0xf.fffffp+124, 0xcp-4)":
+float: 5
+ifloat: 5
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
float: 1
+ifloat: 1
+
+# pow_downward
+Test "pow_downward (1.0625, 1.125)":
+double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x0.ffffffffffffffffp0)":
+
+# pow_tonearest
+Test "pow_tonearest (-0x2p+0, -0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow_tonearest (-0x2p+0, -0x7.fp+4)":
+float: 7
+ifloat: 7
+Test "pow_tonearest (-0x2p+0, 0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow_tonearest (-0x8p-4, -0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow_tonearest (-0x8p-4, 0x7.ep+4)":
+ildouble: 7
+ldouble: 7
+Test "pow_tonearest (-0x8p-4, 0x7.fp+4)":
+float: 7
+ifloat: 7
+Test "pow_tonearest (0x1p+64, 0x2p-4)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1p+8, 0x8p+0)":
+float: 1
+ifloat: 1
+ildouble: 7
+ldouble: 7
+Test "pow_tonearest (0xf.ffffffffffff8p+1020, 0xcp-4)":
+double: 1
+idouble: 1
+Test "pow_tonearest (0xf.fffffp+124, 0xcp-4)":
+float: 5
+ifloat: 5
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x0.ffffffp0)":
+Test "pow_towardzero (1.5, 1.03125)":
float: 1
ifloat: 1
-Test "tgamma (-0x1.000002p0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.0a32a2p+5)":
-float: 2
-ifloat: 2
-Test "tgamma (-0x1.fffffffffffffp0)":
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_upward (1.5, 1.03125)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# sin
+Test "sin (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin (0x4.1237e153f708p+0)":
+double: 1
+idouble: 1
+Test "sin (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin (0xe.ef3af1b5d8p-4)":
+double: 1
+idouble: 1
+
+# sin_tonearest
+Test "sin_tonearest (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_tonearest (0x4.1237e153f708p+0)":
+double: 1
+idouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_tonearest (0xe.ef3af1b5d8p-4)":
+double: 1
+idouble: 1
+
+# tgamma
+Test "tgamma (-0x1.000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffep0)":
+Test "tgamma (-0x1.3ffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffffep0)":
+Test "tgamma (-0x1.3ffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffp0)":
+Test "tgamma (-0x1.3ffffffffffffp+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0x14.000000000000002p0)":
+Test "tgamma (-0x1.4000000000000002p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0x14.000000000001p0)":
+Test "tgamma (-0x1.4000000000001p+4)":
double: 1
idouble: 1
-Test "tgamma (-0x14.00002p0)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0x1.400002p+4)":
float: 3
ifloat: 3
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.ffffffffffffffep0)":
+Test "tgamma (-0x1.8p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x1.dffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.ffffffffffffp0)":
+Test "tgamma (-0x1.dffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000000002p0)":
+Test "tgamma (-0x1.e000000000000002p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x1e.000000000001p0)":
+Test "tgamma (-0x1.e000000000001p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.00002p0)":
+Test "tgamma (-0x1.e00002p+4)":
ildouble: 2
ldouble: 2
+Test "tgamma (-0x1.f3fffep+8)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x1.f3fffffffffffp+8)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (-0x1.f400000000000002p+8)":
+ildouble: 8
+ldouble: 8
+Test "tgamma (-0x1.f40002p+8)":
+ildouble: 4
+ldouble: 4
+Test "tgamma (-0x1.fffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
Test "tgamma (-0x1p-24)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000000004p0)":
+Test "tgamma (-0x2.0000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000002p0)":
+Test "tgamma (-0x2.0000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.000004p0)":
+Test "tgamma (-0x2.000004p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffcp0)":
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x2.7ffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffffffffffffcp0)":
+Test "tgamma (-0x2.7fffffffffffep+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x2.7ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.00004p0)":
+Test "tgamma (-0x2.8000000000000004p+4)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0x2.800004p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x28.fffffffffffep0)":
+Test "tgamma (-0x2.8ffffcp+4)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0x2.8fffffffffffep+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.ffffffffffffffcp0)":
+Test "tgamma (-0x2.8ffffffffffffffcp+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0x29.000000000000004p0)":
+Test "tgamma (-0x2.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.9000000000000004p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0x29.00004p0)":
+Test "tgamma (-0x2.9000000000002p+4)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (-0x2.900004p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0x29.fffffffffffep0)":
+Test "tgamma (-0x2.9ffffcp+4)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (-0x2.9fffffffffffep+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x29.ffffffffffffffcp0)":
+Test "tgamma (-0x2.9ffffffffffffffcp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x3.0000000000002p0)":
+Test "tgamma (-0x2.a000000000002p+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x3.0000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.000004p0)":
-float: 1
-ifloat: 1
-Test "tgamma (-0x3.fffffcp0)":
+Test "tgamma (-0x3.000004p+0)":
float: 1
ifloat: 1
-Test "tgamma (-0x3.fffffffffffffffcp0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x31.fffffffffffep0)":
+Test "tgamma (-0x3.1ffffcp+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0x3.1fffffffffffep+4)":
double: 1
idouble: 1
-Test "tgamma (-0x32.000000000000004p0)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x3.2000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e7.fffffffffffffcp0)":
+Test "tgamma (-0x3.2000000000002p+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x3.200004p+4)":
+double: 1
+idouble: 1
+ildouble: 8
+ldouble: 8
+Test "tgamma (-0x3.e7fffffffffffffcp+8)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0x4.0000000000000008p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x4.000008p0)":
-float: 2
-ifloat: 2
-Test "tgamma (-0x4.fffff8p0)":
+Test "tgamma (-0x3.e800000000002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.0000000000000008p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x5.0000000000004p0)":
+Test "tgamma (-0x3.e80004p+8)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x3.fffffcp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.000008p0)":
+Test "tgamma (-0x4.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.fffff8p0)":
+Test "tgamma (-0x4.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x4.8p+0)":
float: 1
ifloat: 1
-Test "tgamma (-0x6.0000000000000008p0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.fffff8p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x6.ffffffffffffcp0)":
-double: 3
-idouble: 3
+Test "tgamma (-0x4.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x63.ffffffffffffff8p0)":
+Test "tgamma (-0x5.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e2.fffffffffffff8p0)":
+Test "tgamma (-0x5.0000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e3.00000000000008p0)":
+Test "tgamma (-0x5.000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e4.fffffffffffff8p0)":
+Test "tgamma (-0x5.fffff8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.0000000000000008p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.3ffff8p+4)":
+ildouble: 4
+ldouble: 4
+Test "tgamma (-0x6.3fffffffffffcp+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0x6.3ffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e5.00000000000008p0)":
+Test "tgamma (-0x6.4000000000004p+4)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0x6.400008p+4)":
+ildouble: 9
+ldouble: 9
+Test "tgamma (-0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.d60008p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.fffff8p+0)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 3
+idouble: 3
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.0000000000000008p0)":
+Test "tgamma (-0x7.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.0000000000004p0)":
+Test "tgamma (-0x7.0000000000004p+0)":
double: 4
idouble: 4
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.000008p0)":
+Test "tgamma (-0x7.000008p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.fffff8p0)":
+Test "tgamma (-0x7.8p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x7.fffff8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.ffffffffffffcp0)":
+Test "tgamma (-0x7.ffffffffffffcp+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.fffffffffffffff8p0)":
+Test "tgamma (-0x7.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x8.000000000000001p0)":
+Test "tgamma (-0x8.000000000000001p+0)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0x8.00001p0)":
+Test "tgamma (-0x8.00001p+0)":
double: 1
idouble: 1
-Test "tgamma (-0x9.ffffffffffff8p0)":
+Test "tgamma (-0x8.8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x9.fffffp0)":
+Test "tgamma (-0x8p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (-0x95.fffffffffff8p0)":
+Test "tgamma (-0x9.5fffffffffff8p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0x95.ffffffffffffffp0)":
+Test "tgamma (-0x9.5ffffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xa.000000000000001p0)":
+Test "tgamma (-0x9.60001p+4)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (-0x9.8p+0)":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "tgamma (-0xa.0000000000008p0)":
+Test "tgamma (-0x9.ffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xa.00001p0)":
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0xa.000000000000001p+0)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xa.0000000000008p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xa.00001p+0)":
double: 1
idouble: 1
-Test "tgamma (-0xb5.00000000000001p0)":
+Test "tgamma (-0xb.500000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.000000000008p0)":
+Test "tgamma (-0xb.5000000000008p+4)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (-0xb.5fffffffffff8p+4)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0xb.5ffffp+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0xb.6000000000008p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb6.fffffffffff8p0)":
+Test "tgamma (-0xb.6fffffffffff8p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0xb7.000000000008p0)":
+Test "tgamma (-0xb.7000000000008p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0xb8.00000000000001p0)":
+Test "tgamma (-0xb.800000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb8.000000000008p0)":
+Test "tgamma (-0xb.8000000000008p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0xbb.ffffffffffffffp0)":
+Test "tgamma (-0xb.80001p+4)":
+ildouble: 4
+ldouble: 4
+Test "tgamma (-0xb.bfffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.bffffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbd.00000000000001p0)":
+Test "tgamma (-0xb.bffffp+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0xb.cfffffffffff8p+4)":
+ildouble: 6
+ldouble: 6
+Test "tgamma (-0xb.d00000000000001p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0xf9.ffffffffffffffp0)":
+Test "tgamma (-0xb.dfffffffffff8p+4)":
+ildouble: 9
+ldouble: 9
+Test "tgamma (-0xb.e000000000008p+4)":
+ildouble: 9
+ldouble: 9
+Test "tgamma (-0xf.9fffffffffff8p+4)":
+ildouble: 5
+ldouble: 5
+Test "tgamma (-0xf.9ffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xfa.00000000000001p0)":
+Test "tgamma (-0xf.9ffffp+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0xf.a00000000000001p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-1.5)":
-float: 1
-ifloat: 1
+Test "tgamma (-0xf.a000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-2.5)":
-double: 1
-idouble: 1
-Test "tgamma (-4.5)":
-float: 1
-ifloat: 1
+Test "tgamma (-0xf.fffffffffffffffp-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-6.5)":
+Test "tgamma (-0xf.fffffp-4)":
float: 1
ifloat: 1
-Test "tgamma (-7.5)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-8.5)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (-9.5)":
+Test "tgamma (0x1.28p+4)":
float: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "tgamma (0.5)":
+Test "tgamma (0x1.38p+4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0.7)":
-double: 1
+Test "tgamma (0x1.78p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x1.d8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x1.e8p+4)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (0x1.fffffep0)":
+Test "tgamma (0x1.fffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1.fffffffffffffffep0)":
+Test "tgamma (0x1.fffffffffffffffep+0)":
ildouble: 1
ldouble: 1
Test "tgamma (0x1p-24)":
float: 1
ifloat: 1
-Test "tgamma (0x1p-53)":
-double: 1
-idouble: 1
Test "tgamma (0x1p-64)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x2.0000000000002p0)":
+Test "tgamma (0x2.0000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x2.000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x2.000004p0)":
+Test "tgamma (0x2.08p+4)":
ildouble: 1
ldouble: 1
+Test "tgamma (0x2.18p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.28p+4)":
+float: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
Test "tgamma (0x2.30a43cp+4)":
float: 2
ifloat: 2
@@ -6434,432 +8866,382 @@ ldouble: 3
Test "tgamma (0x2.30a44p+4)":
double: 1
idouble: 1
-Test "tgamma (0x2.fffffcp0)":
+Test "tgamma (0x2.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.fffffcp+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x2.ffffffffffffep0)":
+Test "tgamma (0x2.ffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.0000000000002p0)":
+Test "tgamma (0x3.0000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffcp0)":
+Test "tgamma (0x3.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x3.e8p+8)":
+ildouble: 7
+ldouble: 7
+Test "tgamma (0x3.fffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffffffffffffcp0)":
+Test "tgamma (0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.0000000000000008p0)":
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.000008p0)":
+Test "tgamma (0x4.000008p+0)":
float: 1
ifloat: 1
-Test "tgamma (0x4.fffff8p0)":
+Test "tgamma (0x4.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.fffffffffffffff8p0)":
+Test "tgamma (0x4.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.0000000000000008p0)":
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.000008p0)":
+Test "tgamma (0x5.000008p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.fffff8p0)":
+Test "tgamma (0x5.8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.ffffffffffffcp0)":
+Test "tgamma (0x5.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000000008p0)":
+Test "tgamma (0x5.ffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.000008p0)":
+Test "tgamma (0x5p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.0000000000000008p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x6.000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.fffff8p0)":
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x6.fffff8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.ffffffffffffcp0)":
+Test "tgamma (0x6.ffffffffffffcp+0)":
double: 3
idouble: 3
-Test "tgamma (0x7.0000000000000008p0)":
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000004p0)":
+Test "tgamma (0x7.0000000000004p+0)":
double: 4
idouble: 4
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.000008p0)":
+Test "tgamma (0x7.000008p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x7.8p+0)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.fffff8p0)":
+Test "tgamma (0x7.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.ffffffffffffcp0)":
+Test "tgamma (0x7.ffffffffffffcp+0)":
double: 2
idouble: 2
-Test "tgamma (0x7.fffffffffffffff8p0)":
+Test "tgamma (0x7.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (0x8.000000000000001p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (0x8.00001p0)":
+Test "tgamma (0x7p+0)":
double: 1
idouble: 1
-Test "tgamma (10)":
+Test "tgamma (0x8.000000000000001p+0)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (0x8.00001p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (18.5)":
+Test "tgamma (0x8.8p+0)":
float: 1
ifloat: 1
-Test "tgamma (19.5)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (0x8p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (2.5)":
-float: 1
-ifloat: 1
-Test "tgamma (23.5)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (29.5)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (3)":
+Test "tgamma (0x8p-4)":
float: 1
ifloat: 1
-Test "tgamma (3.5)":
-float: 1
-ifloat: 1
-Test "tgamma (30.5)":
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
float: 1
ifloat: 1
-Test "tgamma (32.5)":
ildouble: 1
ldouble: 1
-Test "tgamma (33.5)":
-float: 1
-ifloat: 1
-Test "tgamma (34.5)":
+Test "tgamma (0x9p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "tgamma (0xa.b9fd7p+4)":
+double: 1
+idouble: 1
+Test "tgamma (0xa.b9fd8p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (4)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (4.5)":
+Test "tgamma (0xap+0)":
double: 1
-idouble: 1
-Test "tgamma (5)":
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (5.5)":
+
+# y0
+Test "y0 (0x1.8p+0)":
float: 1
ifloat: 1
+Test "y0 (0x1p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (6)":
+Test "y0 (0x1p-100)":
float: 1
ifloat: 1
-Test "tgamma (6.5)":
+Test "y0 (0x1p-20)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (7)":
-double: 1
-idouble: 1
-Test "tgamma (7.5)":
+Test "y0 (0x1p-40)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (8)":
+Test "y0 (0x1p-60)":
double: 1
idouble: 1
-Test "tgamma (8.5)":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "tgamma (9)":
+Test "y0 (0x1p-80)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (9.5)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# y0
-Test "y0 (0.125)":
+Test "y0 (0x2p-4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Test "y0 (0.75)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "y0 (0x1.3ffp+74)":
+Test "y0 (0x4.ffcp+72)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-10)":
-float: 1
-ifloat: 1
+Test "y0 (0x4p+16380)":
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-100)":
+Test "y0 (0x4p-112)":
float: 1
ifloat: 1
-Test "y0 (0x1p-110)":
+Test "y0 (0x4p-12)":
float: 1
ifloat: 1
-Test "y0 (0x1p-20)":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-30)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x4p-32)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-40)":
+Test "y0 (0x4p-72)":
double: 1
-float: 1
idouble: 1
+Test "y0 (0x4p-92)":
+float: 1
ifloat: 1
-Test "y0 (0x1p-60)":
-double: 1
-idouble: 1
-Test "y0 (0x1p-70)":
-double: 1
-idouble: 1
-Test "y0 (0x1p-80)":
+Test "y0 (0x8p+0)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0xap+0)":
+float: 1
+ifloat: 1
+Test "y0 (0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (0x1p-90)":
+
+# y1
+Test "y1 (0x1p+0)":
+double: 1
+idouble: 1
+Test "y1 (0x2.002000002p+592)":
+ildouble: 2
+ldouble: 2
+Test "y1 (0x2p+0)":
float: 1
ifloat: 1
-Test "y0 (0x1p16382)":
ildouble: 1
ldouble: 1
-Test "y0 (1.0)":
+Test "y1 (0x2p-4)":
ildouble: 1
ldouble: 1
-Test "y0 (1.5)":
-float: 1
-ifloat: 1
+Test "y1 (0x4p+16380)":
ildouble: 1
ldouble: 1
-Test "y0 (10.0)":
+Test "y1 (0x4p-12)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "y0 (2.0)":
+Test "y1 (0x8p+0)":
float: 1
ifloat: 1
-Test "y0 (8.0)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-# y1
-Test "y1 (0.125)":
-ildouble: 1
-ldouble: 1
-Test "y1 (0x1.001000001p+593)":
-ildouble: 2
-ldouble: 2
-Test "y1 (0x1.27e204p+99)":
+Test "y1 (0x8p+1020)":
+double: 1
+idouble: 1
+Test "y1 (0x9.3f102p+96)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-Test "y1 (0x1p-10)":
-float: 1
-ifloat: 1
-Test "y1 (0x1p1023)":
-double: 1
-idouble: 1
-Test "y1 (0x1p16382)":
+Test "y1 (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "y1 (1.0)":
+Test "y1 (0xf.fffffp+124)":
double: 1
-idouble: 1
-Test "y1 (10.0)":
-float: 1
-ifloat: 1
-Test "y1 (2.0)":
-float: 2
-ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "y1 (8.0)":
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
# yn
-Test "yn (0, 0.125)":
+Test "yn (-1, 0x1p+0)":
double: 1
-float: 1
idouble: 1
+Test "yn (-10, 0x1p+0)":
+float: 2
+ifloat: 2
+Test "yn (0, 0x1.8p+0)":
+float: 1
ifloat: 1
+Test "yn (0, 0x1p+0)":
ildouble: 1
ldouble: 1
-Test "yn (0, 0.75)":
+Test "yn (0, 0x2p-4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (0, 1.0)":
ildouble: 1
ldouble: 1
-Test "yn (0, 1.5)":
-float: 1
-ifloat: 1
+Test "yn (0, 0x8p+0)":
ildouble: 1
ldouble: 1
-Test "yn (0, 10.0)":
+Test "yn (0, 0xap+0)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (0, 2.0)":
+Test "yn (0, 0xcp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "yn (0, 8.0)":
+Test "yn (1, 0x1p+0)":
+double: 1
+idouble: 1
+Test "yn (1, 0x2p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (1, 0.125)":
-float: 1
-ifloat: 1
+Test "yn (1, 0x2p-4)":
ildouble: 1
ldouble: 1
-Test "yn (1, 0.75)":
-float: 1
-ifloat: 1
-Test "yn (1, 1.0)":
-double: 1
-idouble: 1
-Test "yn (1, 10.0)":
+Test "yn (1, 0x8p+0)":
float: 1
ifloat: 1
-Test "yn (1, 2.0)":
+Test "yn (10, 0x1p+0)":
float: 2
ifloat: 2
-ildouble: 1
-ldouble: 1
-Test "yn (1, 8.0)":
+Test "yn (10, 0x2p+0)":
float: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (10, 0.125)":
+Test "yn (10, 0x2p-4)":
double: 1
idouble: 1
ildouble: 2
ldouble: 2
-Test "yn (10, 0.75)":
+Test "yn (10, 0x4p-1024)":
+ildouble: 1
+ldouble: 1
+Test "yn (10, 0x4p-128)":
+ildouble: 1
+ldouble: 1
+Test "yn (10, 0x8p-972)":
+ildouble: 1
+ldouble: 1
+Test "yn (10, 0xap+0)":
+float: 2
+ifloat: 2
+Test "yn (10, 0xcp-4)":
float: 1
ifloat: 1
ildouble: 4
ldouble: 4
-Test "yn (10, 10.0)":
-double: 1
+Test "yn (2, 0x8p+124)":
+float: 3
+ifloat: 3
+Test "yn (2, 0xf.fffb1p+96)":
float: 1
-idouble: 1
ifloat: 1
-Test "yn (3, 0.125)":
ildouble: 1
ldouble: 1
-Test "yn (3, 0.75)":
+Test "yn (3, 0x2p-4)":
+ildouble: 1
+ldouble: 1
+Test "yn (3, 0xcp-4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
ildouble: 2
ldouble: 2
-Test "yn (3, 2.0)":
-float: 1
-ifloat: 1
# Maximal error of functions:
-Function: "acos_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "acos_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "acos_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
Function: "acosh":
double: 1
idouble: 1
-ildouble: 1
-ldouble: 1
Function: "asin_downward":
double: 1
@@ -6886,6 +9268,8 @@ ildouble: 1
ldouble: 1
Function: "asinh":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -6893,10 +9277,6 @@ Function: "atan2":
ildouble: 1
ldouble: 1
-Function: "atanh":
-ildouble: 1
-ldouble: 1
-
Function: Real part of "cacos":
double: 1
float: 2
@@ -6906,9 +9286,9 @@ ildouble: 1
ldouble: 1
Function: Imaginary part of "cacos":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
@@ -6918,48 +9298,48 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 6
-ldouble: 6
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "cacosh":
double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: Real part of "casin":
double: 1
-float: 5
+float: 1
idouble: 1
-ifloat: 5
-ildouble: 3
-ldouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Imaginary part of "casin":
-double: 2
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
Function: Real part of "casinh":
-double: 6
+double: 1
float: 1
-idouble: 6
+idouble: 1
ifloat: 1
-ildouble: 5
-ldouble: 5
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "casinh":
-double: 13
-float: 6
-idouble: 13
-ifloat: 6
-ildouble: 6
-ldouble: 6
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Real part of "catan":
ildouble: 1
@@ -6986,40 +9366,30 @@ ildouble: 1
ldouble: 1
Function: "cbrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: Real part of "ccos":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Function: Imaginary part of "ccos":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Function: Real part of "ccosh":
-float: 1
-ifloat: 1
-
Function: Imaginary part of "ccosh":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
Function: Real part of "cexp":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
@@ -7032,6 +9402,10 @@ ildouble: 1
ldouble: 1
Function: Imaginary part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -7052,95 +9426,35 @@ ildouble: 2
ldouble: 2
Function: "cos":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cos_downward":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Function: "cos_towardzero":
+Function: "cos_tonearest":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cos_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cosh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cosh_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "cosh_upward":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
Function: Real part of "cpow":
double: 1
float: 3
idouble: 1
ifloat: 3
-ildouble: 15
-ldouble: 15
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "cpow":
-double: 2
float: 5
-idouble: 2
ifloat: 5
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: Real part of "csin":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Function: Imaginary part of "csin":
-float: 1
-ifloat: 1
-
Function: Real part of "csinh":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
-Function: Imaginary part of "csinh":
-float: 1
-ifloat: 1
-
Function: Real part of "csqrt":
double: 1
idouble: 1
@@ -7162,68 +9476,84 @@ ildouble: 2
ldouble: 2
Function: Imaginary part of "ctan":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "ctan_downward":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 2
ldouble: 2
Function: Imaginary part of "ctan_downward":
double: 3
-float: 1
+float: 2
idouble: 3
-ifloat: 1
-ildouble: 1
-ldouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "ctan_towardzero":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "ctan_towardzero":
double: 3
-float: 1
+float: 2
idouble: 3
-ifloat: 1
+ifloat: 2
ildouble: 4
ldouble: 4
Function: Real part of "ctan_upward":
double: 1
-float: 1
+float: 3
idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
Function: Imaginary part of "ctan_upward":
double: 1
+float: 1
idouble: 1
-ildouble: 8
-ldouble: 8
+ifloat: 1
+ildouble: 7
+ldouble: 7
Function: Real part of "ctanh":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "ctanh":
double: 1
@@ -7235,99 +9565,94 @@ ldouble: 2
Function: Real part of "ctanh_downward":
double: 3
-float: 1
+float: 2
idouble: 3
-ifloat: 1
-ildouble: 1
-ldouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "ctanh_downward":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 2
ldouble: 2
Function: Real part of "ctanh_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
Function: Real part of "ctanh_towardzero":
double: 3
-float: 1
+float: 2
idouble: 3
-ifloat: 1
+ifloat: 2
ildouble: 4
ldouble: 4
Function: Imaginary part of "ctanh_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: Real part of "ctanh_upward":
double: 1
+float: 2
idouble: 1
-ildouble: 8
-ldouble: 8
+ifloat: 2
+ildouble: 7
+ldouble: 7
Function: Imaginary part of "ctanh_upward":
double: 1
-float: 1
+float: 3
idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
-Function: "erfc":
-float: 1
-ifloat: 1
+Function: "erf":
ildouble: 1
ldouble: 1
-Function: "exp_downward":
-double: 1
+Function: "erfc":
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Function: "expm1":
ildouble: 1
ldouble: 1
-Function: "exp_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "expm1":
+Function: "expm1_tonearest":
ildouble: 1
ldouble: 1
Function: "gamma":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
ildouble: 1
ldouble: 1
Function: "hypot":
-float: 1
-ifloat: 1
+double: 1
+idouble: 1
+ildouble: 1
ldouble: 1
Function: "j0":
@@ -7346,43 +9671,21 @@ ldouble: 1
Function: "jn":
double: 1
-float: 5
-idouble: 1
-ifloat: 5
-ildouble: 3
-ldouble: 3
-
-Function: "lgamma":
-double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
-
-Function: "log":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "log10":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-
-Function: "log1p":
-ildouble: 1
-ldouble: 1
+ildouble: 4
+ldouble: 4
-Function: "log2":
+Function: "lgamma":
ildouble: 1
ldouble: 1
Function: "pow":
-float: 1
-ifloat: 1
+double: 1
+float: 5
+idouble: 1
+ifloat: 7
ildouble: 7
ldouble: 7
@@ -7394,67 +9697,15 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "pow_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "pow_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin_towardzero":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sin_upward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sincos":
+Function: "pow_tonearest":
double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-
-Function: "sinh":
-ildouble: 1
-ldouble: 1
-
-Function: "sinh_downward":
-double: 1
-float: 1
+float: 7
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+ifloat: 7
+ildouble: 7
+ldouble: 7
-Function: "sinh_towardzero":
+Function: "pow_towardzero":
double: 1
float: 1
idouble: 1
@@ -7462,17 +9713,7 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "sinh_upward":
-double: 1
-idouble: 1
-
-Function: "tan":
-double: 1
-idouble: 1
-ildouble: 1
-ldouble: 1
-
-Function: "tan_downward":
+Function: "pow_upward":
double: 1
float: 1
idouble: 1
@@ -7480,37 +9721,29 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "tan_towardzero":
+Function: "sin":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Function: "tan_upward":
+Function: "sin_tonearest":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
Function: "tgamma":
double: 4
float: 3
idouble: 4
ifloat: 3
-ildouble: 4
-ldouble: 4
+ildouble: 9
+ldouble: 9
Function: "y0":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: "y1":
double: 1
@@ -7522,9 +9755,9 @@ ldouble: 2
Function: "yn":
double: 1
-float: 2
+float: 3
idouble: 1
-ifloat: 2
+ifloat: 3
ildouble: 4
ldouble: 4
diff --git a/libc/ports/sysdeps/microblaze/fegetround.c b/libc/ports/sysdeps/microblaze/fegetround.c
deleted file mode 100644
index a2e57ebc2..000000000
--- a/libc/ports/sysdeps/microblaze/fegetround.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 2011-2014 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-
-int
-fegetround (void)
-{
- return FE_TONEAREST;
-}
-libm_hidden_def (fegetround)
diff --git a/libc/ports/sysdeps/microblaze/fesetround.c b/libc/ports/sysdeps/microblaze/fesetround.c
deleted file mode 100644
index 16e2bf20e..000000000
--- a/libc/ports/sysdeps/microblaze/fesetround.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (C) 2011-2014 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-
-int
-fesetround (int round)
-{
- return (round == FE_TONEAREST) ? 0 : 1;
-}
-libm_hidden_def (fesetround)
diff --git a/libc/ports/sysdeps/microblaze/libm-test-ulps b/libc/ports/sysdeps/microblaze/libm-test-ulps
index 9820f51ee..60bdc4758 100644
--- a/libc/ports/sysdeps/microblaze/libm-test-ulps
+++ b/libc/ports/sysdeps/microblaze/libm-test-ulps
@@ -1,21 +1,52 @@
# Begin of automatic generation
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xap+0)":
+float: 1
+ifloat: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
+
# atan2
-Test "atan2 (-0.75, -1.0)":
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
float: 1
ifloat: 1
-Test "atan2 (-max_value, -min_value)":
+Test "atan2 (-0xcp-4, -0x1p+0)":
float: 1
ifloat: 1
-Test "atan2 (0.75, -1.0)":
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
float: 1
ifloat: 1
-Test "atan2 (1.390625, 0.9296875)":
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
+float: 1
+ifloat: 1
+Test "atan2 (0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
float: 1
ifloat: 1
# atanh
-Test "atanh (0.75)":
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
+Test "atanh (0xcp-4)":
float: 1
ifloat: 1
@@ -64,27 +95,619 @@ ifloat: 1
Test "Imaginary part of: cacos (-0 - 1.5 i)":
double: 1
idouble: 1
+Test "Real part of: cacos (-0.25 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0.25 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
Test "Real part of: cacos (-1.0 + 0x1p50 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: cacos (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
Test "Real part of: cacos (-1.0 - 0x1p50 i)":
float: 1
ifloat: 1
Test "Real part of: cacos (-2 - 3 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: cacos (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
Test "Real part of: cacos (0.5 + +0 i)":
double: 1
idouble: 1
+Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.5 + 1.0 i)":
+double: 1
+idouble: 1
Test "Real part of: cacos (0.5 - 0 i)":
double: 1
idouble: 1
+Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)":
double: 1
idouble: 1
Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 + 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 - 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
# cacosh
Test "Real part of: cacosh (+0 + 0.5 i)":
@@ -131,27 +754,619 @@ ifloat: 1
Test "Real part of: cacosh (-0 - 1.5 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cacosh (-0.5 + +0 i)":
+Test "Real part of: cacosh (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0.25 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0.25 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 0x1p-112 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cacosh (-0.5 - 0 i)":
+Test "Real part of: cacosh (-0.5 + 0x1p-23 i)":
double: 1
idouble: 1
-Test "Real part of: cacosh (-1.5 + +0 i)":
+Test "Real part of: cacosh (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + 1.0 i)":
float: 1
ifloat: 1
-Test "Real part of: cacosh (-1.5 - 0 i)":
+Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)":
float: 1
ifloat: 1
Test "Imaginary part of: cacosh (-2 - 3 i)":
float: 1
ifloat: 1
-Test "Real part of: cacosh (1.5 + +0 i)":
+Test "Real part of: cacosh (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0.5 + +0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0.5 - 0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)":
float: 1
ifloat: 1
-Test "Real part of: cacosh (1.5 - 0 i)":
+Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)":
+float: 2
+ifloat: 2
# casin
Test "Imaginary part of: casin (+0 + 0.5 i)":
@@ -198,47 +1413,729 @@ ifloat: 1
Test "Imaginary part of: casin (-0 - 1.5 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casin (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-0x1p-23 + 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casin (-0x1p-23 - 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 1.0 i)":
+double: 1
+idouble: 1
Test "Real part of: casin (0.75 + 1.25 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)":
double: 1
idouble: 1
Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casin (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (0x1p-23 + 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casin (0x1p-23 - 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
# casinh
+Test "Imaginary part of: casinh (-0.25 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-0.25 - 1.0 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (-0.5 + +0 i)":
float: 1
ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
Test "Real part of: casinh (-0.5 - 0 i)":
float: 1
ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-105 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-105 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-112 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-112 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1p-23 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (-1.0 + +0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (-1.0 + 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: casinh (-1.0 - 0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (-1.0 - 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: casinh (-1.5 + +0 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (-1.5 - 0 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0.25 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0.25 - 1.0 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (0.5 + +0 i)":
float: 1
ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
Test "Real part of: casinh (0.5 - 0 i)":
float: 1
ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
Test "Real part of: casinh (0.75 + 1.25 i)":
float: 1
ifloat: 1
@@ -247,240 +2144,1070 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-129 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp-129 - 0.5 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)":
double: 1
idouble: 1
Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (0x1p-105 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-105 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-112 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-112 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1p-23 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (1.0 + +0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (1.0 + 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: casinh (1.0 - 0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casinh (1.0 - 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
Test "Real part of: casinh (1.5 + +0 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
Test "Real part of: casinh (1.5 - 0 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
# catan
+Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
Test "Imaginary part of: catan (-2 - 3 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-54 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-54 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-57 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-57 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
# catanh
+Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-1.0 + 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 + 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 + 0x1p-57 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-57 i)":
+float: 1
+ifloat: 1
Test "Real part of: catanh (-2 - 3 i)":
-double: 4
-idouble: 4
-Test "Real part of: catanh (0.75 + 1.25 i)":
double: 1
idouble: 1
+Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (1.0 + 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 + 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 + 0x1p-57 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-57 i)":
+float: 1
+ifloat: 1
# cbrt
-Test "cbrt (-27.0)":
+Test "cbrt (-0x1.bp+4)":
double: 1
idouble: 1
-Test "cbrt (0.75)":
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+Test "cbrt (0xcp-4)":
double: 1
idouble: 1
-Test "cbrt (0.9921875)":
+Test "cbrt (0xf.ep-4)":
double: 1
idouble: 1
# ccos
-Test "Imaginary part of: ccos (-0.75 + 710.5 i)":
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (-0.75 + 89.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (-0.75 - 710.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (-0.75 - 89.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-Test "Real part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
+double: 1
idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i)":
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 710.5 i)":
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (0.75 + 89.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 - 710.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
double: 1
+float: 1
idouble: 1
-Test "Imaginary part of: ccos (0.75 - 89.5 i)":
+ifloat: 1
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)":
+
+# cexp
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
double: 1
idouble: 1
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i)":
+# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-710.5 + 0.75 i)":
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (-710.5 - 0.75 i)":
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (-89.5 + 0.75 i)":
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-89.5 - 0.75 i)":
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Real part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
double: 1
+idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+double: 1
idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)":
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (710.5 + 0.75 i)":
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (710.5 - 0.75 i)":
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (89.5 + 0.75 i)":
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (89.5 - 0.75 i)":
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
float: 1
ifloat: 1
-
-# cexp
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (-95 + 0.75 i)":
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i)":
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)":
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (50 + 0x1p127 i)":
-double: 2
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
float: 1
-idouble: 2
ifloat: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i)":
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (500 + 0x1p1023 i)":
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i)":
-float: 2
-ifloat: 2
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)":
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)":
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)":
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)":
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)":
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)":
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (0x1p-147 + 0x1p-147 i)":
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)":
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
float: 1
ifloat: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (-0 - inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
double: 2
@@ -529,28 +3256,47 @@ Test "Imaginary part of: clog10 (-2 - 3 i)":
double: 1
idouble: 1
Test "Imaginary part of: clog10 (-3 + inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (-3 - inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (-inf + 0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (-inf + 1 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: clog10 (-inf + inf i)":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (-inf - 0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (-inf - 1 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0 + inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0 - inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)":
double: 1
@@ -581,11 +3327,16 @@ float: 1
idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+double: 1
+idouble: 1
Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
double: 1
idouble: 1
@@ -601,17 +3352,25 @@ idouble: 1
Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)":
double: 1
idouble: 1
Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)":
+double: 1
+idouble: 1
Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)":
double: 1
idouble: 1
Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)":
double: 1
@@ -619,7 +3378,9 @@ float: 1
idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)":
double: 1
@@ -689,66 +3450,110 @@ Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)":
double: 1
idouble: 1
Test "Imaginary part of: clog10 (3 + inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (3 - inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (inf + inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Test "Imaginary part of: clog10 (inf - inf i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
# cos
Test "cos (0x1p+120)":
float: 1
ifloat: 1
-Test "cos (0x1p+127)":
+Test "cos (0x7p+0)":
float: 1
ifloat: 1
-Test "cos (M_PI_6l * 2.0)":
-double: 1
-idouble: 1
-Test "cos (M_PI_6l * 4.0)":
-double: 2
+Test "cos (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos (0xc.d4967p-4)":
float: 1
-idouble: 2
ifloat: 1
# cos_tonearest
-Test "cos_tonearest (7)":
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xc.d4967p-4)":
float: 1
ifloat: 1
-# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
+# cosh
+Test "cosh (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
float: 1
ifloat: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cpow
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
double: 2
float: 3
idouble: 2
ifloat: 3
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i)":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
# csin
Test "Real part of: csin (-0.75 + 710.5 i)":
@@ -818,591 +3623,1468 @@ float: 1
ifloat: 1
# csqrt
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Real part of: csqrt (-2 + 3 i)":
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
float: 1
ifloat: 1
-Test "Real part of: csqrt (-2 - 3 i)":
+
+# ctan
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)":
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
double: 1
+float: 1
idouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i)":
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan (-2 - 3 i)":
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctan (0x1p1023 + 1 i)":
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0x1p127 + 1 i)":
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
# ctan_tonearest
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)":
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Real part of: ctanh (0.75 + 1.25 i)":
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
-float: 2
-ifloat: 2
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
double: 1
idouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i)":
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
-
-# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# erf
-Test "erf (1.25)":
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
idouble: 1
-
-# erfc
-Test "erfc (0x1.f7303cp+1)":
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-Test "erfc (0x1.ffa002p+2)":
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "erfc (2.0)":
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-Test "erfc (4.125)":
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
-# exp10
-Test "exp10 (-1)":
+# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
double: 1
idouble: 1
-Test "exp10 (-305)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
double: 1
+float: 1
idouble: 1
-Test "exp10 (-36)":
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
double: 1
+float: 1
idouble: 1
-Test "exp10 (3)":
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
double: 1
idouble: 1
-Test "exp10 (36)":
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
-
-# expm1
-Test "expm1 (0.75)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
double: 1
idouble: 1
-Test "expm1 (1)":
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "expm1 (500.0)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
idouble: 1
-
-# fma
-Test "fma (-0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-Test "fma (0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300)":
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-Test "fma (0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-Test "fma (0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-Test "fma (0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "fma (0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "hypot (-0.7, 12.4)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "hypot (-12.4, -0.7)":
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-12.4, 0.7)":
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# erf
+Test "erf (0x1.4p+0)":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (-0x8p-4)":
float: 1
ifloat: 1
-Test "hypot (0.7, -12.4)":
+Test "erfc (0x2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x7.fe8008p+0)":
float: 1
ifloat: 1
-Test "hypot (0.7, 12.4)":
+Test "erfc (0x7.fffd6p+0)":
float: 1
ifloat: 1
-Test "hypot (12.4, -0.7)":
+
+# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x3p+0)":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (12.4, 0.7)":
+Test "expm1 (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
+double: 1
+idouble: 1
-# j0
-Test "j0 (-4.0)":
+# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (0.75)":
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "gamma (0x4p-12)":
float: 1
ifloat: 1
-Test "j0 (0x1.d7ce3ap+107)":
-float: 2
-ifloat: 2
-Test "j0 (10.0)":
-double: 2
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+
+# j0
+Test "j0 (-0x4p+0)":
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-Test "j0 (2.0)":
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "j0 (0x2p+0)":
float: 2
ifloat: 2
-Test "j0 (4.0)":
+Test "j0 (0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (8.0)":
+Test "j0 (0x8p+0)":
float: 1
ifloat: 1
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
# j1
-Test "j1 (0x1.3ffp+74)":
+Test "j1 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
-Test "j1 (0x1.ff00000000002p+840)":
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "j1 (0x8p+0)":
double: 1
idouble: 1
-Test "j1 (10.0)":
+Test "j1 (0xap+0)":
float: 2
ifloat: 2
-Test "j1 (2.0)":
+Test "j1 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "j1 (8.0)":
+Test "j1 (0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
# jn
-Test "jn (0, -4.0)":
+Test "jn (0, -0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 0.75)":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "jn (0, 2.0)":
+Test "jn (0, 0x2p+0)":
float: 2
ifloat: 2
-Test "jn (0, 4.0)":
+Test "jn (0, 0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 8.0)":
+Test "jn (0, 0x8p+0)":
float: 1
ifloat: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
-Test "jn (1, 2.0)":
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x2p+0)":
double: 1
idouble: 1
-Test "jn (1, 8.0)":
+Test "jn (1, 0x8p+0)":
double: 1
idouble: 1
-Test "jn (10, 0.125)":
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (10, 0.75)":
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "jn (10, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (10, 10.0)":
-double: 4
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
float: 3
-idouble: 4
+idouble: 1
ifloat: 3
-Test "jn (10, 2.0)":
+Test "jn (2, 0x8p+124)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-Test "jn (2, 0x1.ffff62p+99)":
+Test "jn (2, 0xf.fffb1p+96)":
double: 2
float: 2
idouble: 2
ifloat: 2
-Test "jn (2, 2.4048255576957729)":
+Test "jn (2, 0xf.fffffp+124)":
double: 2
-float: 1
+float: 2
idouble: 2
+ifloat: 2
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (3, 0x2p+0)":
+float: 1
ifloat: 1
-Test "jn (3, 0.125)":
+Test "jn (3, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 0.75)":
+Test "jn (3, 0xap+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 10.0)":
-double: 3
+Test "jn (4, 0x2.67a2a4p+0)":
float: 1
-idouble: 3
ifloat: 1
-Test "jn (3, 2.0)":
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
float: 1
ifloat: 1
-Test "jn (3, 2.4048255576957729)":
-double: 3
-idouble: 3
-Test "jn (4, 2.4048255576957729)":
+Test "jn (5, 0x2.67a2a4p+0)":
double: 1
+float: 1
idouble: 1
-Test "jn (5, 2.4048255576957729)":
-double: 3
+ifloat: 1
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
float: 1
-idouble: 3
+idouble: 2
ifloat: 1
-Test "jn (6, 2.4048255576957729)":
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
double: 4
-float: 3
idouble: 4
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
ifloat: 3
-Test "jn (7, 2.4048255576957729)":
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
double: 3
-float: 5
idouble: 3
-ifloat: 5
-Test "jn (8, 2.4048255576957729)":
-double: 3
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
float: 2
-idouble: 3
+idouble: 2
ifloat: 2
-Test "jn (9, 2.4048255576957729)":
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+Test "jn (9, 0x2.67a2a4p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
# lgamma
-Test "lgamma (0.7)":
+Test "lgamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "lgamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "lgamma (1.2)":
+Test "lgamma (-0x4p-12)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "lgamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "lgamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "lgamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# log
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
# log10
-Test "log10 (0.75)":
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+Test "log10 (0xcp-4)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "log10 (e)":
-float: 1
-ifloat: 1
# log1p
-Test "log1p (-0.25)":
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e15p+0)":
float: 1
ifloat: 1
# pow
-Test "pow (0x0.ffffffp0, -0x1p24)":
+Test "pow (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# pow10
+Test "pow10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "pow10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "pow10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "pow10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "pow10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# pow_tonearest
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
-Test "pow (0x0.ffffffp0, 0x1p24)":
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
float: 1
ifloat: 1
-Test "pow (0x1.000002p0, 0x1p24)":
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# sin
+Test "sin (0x1p+0)":
float: 1
ifloat: 1
# sin_tonearest
-Test "sin_tonearest (1)":
+Test "sin_tonearest (0x1p+0)":
float: 1
ifloat: 1
# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
+float: 1
+ifloat: 1
Test "sincos (0x1p+120) extra output 2":
float: 1
ifloat: 1
-Test "sincos (0x1p+127) extra output 2":
+Test "sincos (0x8.60a92p-4) extra output 2":
float: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 1":
-double: 1
+Test "sincos (0x8p+124) extra output 2":
float: 1
-idouble: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
-double: 1
-idouble: 1
-Test "sincos (pi/6) extra output 2":
+Test "sincos (0xc.d4967p-4) extra output 2":
float: 1
ifloat: 1
# tgamma
-Test "tgamma (-0.5)":
+Test "tgamma (-0x1.000002p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x1.3ffffep+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x1.4000000000001p+4)":
double: 1
-float: 1
idouble: 1
+Test "tgamma (-0x1.400002p+4)":
+float: 1
ifloat: 1
-Test "tgamma (0.5)":
+Test "tgamma (-0x1.dffffep+4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (0.7)":
+Test "tgamma (-0x1.e000000000001p+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x1.e00002p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-
-# y0
-Test "y0 (0x1.3ffp+74)":
+Test "tgamma (-0x2.0000000000002p+0)":
double: 1
idouble: 1
-Test "y0 (0x1.ff00000000002p+840)":
+Test "tgamma (-0x2.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
double: 1
idouble: 1
-Test "y0 (0x1p-10)":
+Test "tgamma (-0x2.8000000000002p+4)":
double: 1
idouble: 1
-Test "y0 (0x1p-110)":
+Test "tgamma (-0x2.800004p+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x2.8p+0)":
double: 1
+float: 2
idouble: 1
-Test "y0 (0x1p-20)":
+ifloat: 2
+Test "tgamma (-0x2.900004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.9ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.fffffcp+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "y0 (0x1p-30)":
+Test "tgamma (-0x3.000004p+0)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-Test "y0 (0x1p-40)":
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x3.1fffffffffffep+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x3.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.fffffcp+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (0x1p-50)":
+Test "tgamma (-0x3.ffffffffffffep+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x4.000008p+0)":
float: 1
ifloat: 1
-Test "y0 (0x1p-70)":
+Test "tgamma (-0x4.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "y0 (0x1p-80)":
+ifloat: 1
+Test "tgamma (-0x4.fffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (1.0)":
+Test "tgamma (-0x5.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x6.3fffffffffffcp+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.fffff8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "y0 (1.5)":
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (-0x7.0000000000004p+0)":
+double: 3
+idouble: 3
+Test "tgamma (-0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x7.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "y0 (10.0)":
+Test "tgamma (-0x7.fffff8p+0)":
+double: 3
float: 1
+idouble: 3
ifloat: 1
-Test "y0 (8.0)":
+Test "tgamma (-0x7.ffffffffffffcp+0)":
+double: 3
+idouble: 3
+Test "tgamma (-0x8.00001p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x8.8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-
-# y1
-Test "y1 (0.125)":
+Test "tgamma (-0x8p-4)":
double: 1
+float: 1
idouble: 1
-Test "y1 (0x1.27e204p+99)":
+ifloat: 1
+Test "tgamma (-0x9.6000000000008p+4)":
double: 1
idouble: 1
-Test "y1 (0x1p-10)":
+Test "tgamma (-0x9.60001p+4)":
double: 1
idouble: 1
-Test "y1 (1.5)":
+Test "tgamma (-0x9.8p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "y1 (10.0)":
-double: 3
+Test "tgamma (-0x9.ffffffffffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.fffffp+0)":
float: 1
-idouble: 3
ifloat: 1
-Test "y1 (2.0)":
+Test "tgamma (-0xa.00001p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0xa.c0001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.fffffp-4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.28p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y1 (8.0)":
+Test "tgamma (0x1.38p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0x1.78p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.d8p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.e8p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffep+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffffffffffp+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x1p-24)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.18p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.28p+4)":
double: 1
float: 2
idouble: 1
ifloat: 2
+Test "tgamma (0x2.30a43cp+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
+float: 3
+ifloat: 3
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x3.fffffcp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x3.ffffffffffffep+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x5.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x5.fffff8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x6.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x6.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.fffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000004p+0)":
+double: 4
+idouble: 4
+Test "tgamma (0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.ffffffffffffcp+0)":
+double: 2
+idouble: 2
+Test "tgamma (0x7p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8.00001p+0)":
+double: 2
+idouble: 2
+Test "tgamma (0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8p-4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x9p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0xa.b9fd72b0fb238p+4)":
+double: 1
+idouble: 1
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
-# yn
-Test "yn (0, 1.0)":
+# y0
+Test "y0 (0x1.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 1.5)":
+Test "y0 (0x1.ff00000000002p+840)":
+double: 1
+idouble: 1
+Test "y0 (0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 10.0)":
+Test "y0 (0x1p-20)":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-40)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x1p-80)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-112)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-32)":
+float: 1
+ifloat: 1
+Test "y0 (0x4p-52)":
float: 1
ifloat: 1
-Test "yn (0, 8.0)":
+Test "y0 (0x4p-72)":
+double: 1
+idouble: 1
+Test "y0 (0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (1, 0.125)":
+Test "y0 (0xap+0)":
+float: 1
+ifloat: 1
+Test "y0 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "yn (1, 1.5)":
+Test "y0 (0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "y1 (0x2p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "yn (1, 10.0)":
+Test "y1 (0x2p-4)":
+double: 1
+idouble: 1
+Test "y1 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y1 (0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
+Test "y1 (0xap+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "yn (1, 2.0)":
+Test "y1 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# yn
+Test "yn (-10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (0, 0x1.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x1p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (1, 8.0)":
+Test "yn (0, 0xap+0)":
+float: 1
+ifloat: 1
+Test "yn (1, 0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "yn (1, 0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (1, 0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "yn (10, 0.125)":
+Test "yn (10, 0x2p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (10, 0x2p-4)":
double: 1
idouble: 1
-Test "yn (10, 0.75)":
+Test "yn (10, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (10, 1.0)":
+Test "yn (10, 0xcp-4)":
double: 1
+float: 1
idouble: 1
-Test "yn (10, 10.0)":
+ifloat: 1
+Test "yn (2, 0x8p+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (10, 2.0)":
-double: 2
-idouble: 2
-Test "yn (3, 0.125)":
+Test "yn (2, 0xf.fffb1p+96)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "yn (3, 0.75)":
+Test "yn (2, 0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (3, 10.0)":
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (3, 2.0)":
+Test "yn (3, 0xcp-4)":
double: 1
idouble: 1
# Maximal error of functions:
+Function: "acosh":
+double: 1
+idouble: 1
+
+Function: "asinh":
+double: 1
+float: 1
+ifloat: 1
+
Function: "atan2":
float: 1
ifloat: 1
@@ -1413,27 +5095,27 @@ ifloat: 1
Function: Real part of "cacos":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Imaginary part of "cacos":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Real part of "cacosh":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Imaginary part of "cacosh":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Real part of "casin":
double: 1
@@ -1443,15 +5125,15 @@ ifloat: 1
Function: Imaginary part of "casin":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Real part of "casinh":
double: 1
-float: 1
+float: 2
idouble: 1
-ifloat: 1
+ifloat: 2
Function: Imaginary part of "casinh":
double: 1
@@ -1459,6 +5141,10 @@ float: 1
idouble: 1
ifloat: 1
+Function: Real part of "catan":
+float: 1
+ifloat: 1
+
Function: Imaginary part of "catan":
double: 1
float: 1
@@ -1466,12 +5152,20 @@ idouble: 1
ifloat: 1
Function: Real part of "catanh":
-double: 4
-idouble: 4
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catanh":
+float: 1
+ifloat: 1
Function: "cbrt":
double: 1
+float: 1
idouble: 1
+ifloat: 1
Function: Real part of "ccos":
double: 1
@@ -1532,15 +5226,25 @@ idouble: 1
ifloat: 1
Function: "cos":
-double: 2
float: 1
-idouble: 2
ifloat: 1
Function: "cos_tonearest":
float: 1
ifloat: 1
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: Real part of "cpow":
double: 2
float: 4
@@ -1548,9 +5252,7 @@ idouble: 2
ifloat: 4
Function: Imaginary part of "cpow":
-double: 2
float: 2
-idouble: 2
ifloat: 2
Function: Real part of "csin":
@@ -1588,36 +5290,46 @@ idouble: 1
ifloat: 1
Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: Imaginary part of "ctan_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Real part of "ctanh":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
Function: Imaginary part of "ctanh":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
Function: Real part of "ctanh_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Function: "erf":
double: 1
@@ -1633,22 +5345,32 @@ Function: "exp10":
double: 1
idouble: 1
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+
Function: "expm1":
double: 1
float: 1
idouble: 1
ifloat: 1
-Function: "fma":
+Function: "expm1_tonearest":
double: 1
float: 1
idouble: 1
ifloat: 1
-Function: "hypot":
+Function: "gamma":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Function: "hypot":
+double: 1
+idouble: 1
+
Function: "j0":
double: 2
float: 2
@@ -1663,15 +5385,19 @@ ifloat: 2
Function: "jn":
double: 4
-float: 5
+float: 4
idouble: 4
-ifloat: 5
+ifloat: 4
Function: "lgamma":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+
+Function: "log":
+float: 1
+ifloat: 1
Function: "log10":
double: 1
@@ -1687,26 +5413,32 @@ Function: "pow":
float: 1
ifloat: 1
-Function: "sin_tonearest":
+Function: "pow10":
+double: 1
+idouble: 1
+
+Function: "pow_tonearest":
float: 1
ifloat: 1
-Function: "sincos":
-double: 1
+Function: "sin":
float: 1
-idouble: 1
ifloat: 1
-Function: "tan":
-double: 1
-idouble: 1
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
-Function: "tgamma":
-double: 1
+Function: "sincos":
float: 1
-idouble: 1
ifloat: 1
+Function: "tgamma":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+
Function: "y0":
double: 2
float: 1
diff --git a/libc/ports/sysdeps/microblaze/libm-test-ulps_new b/libc/ports/sysdeps/microblaze/libm-test-ulps_new
deleted file mode 100644
index 2f33c0769..000000000
--- a/libc/ports/sysdeps/microblaze/libm-test-ulps_new
+++ /dev/null
@@ -1,3032 +0,0 @@
-# Begin of automatic generation
-
-# atan2
-Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 1
-ifloat: 1
-Test "atan2 (-max_value, -min_value) == -pi/2":
-float: 1
-ifloat: 1
-Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 1
-ifloat: 1
-Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
-float: 1
-ifloat: 1
-
-# atanh
-Test "atanh (0.75) == 0.972955074527656652552676371721589865":
-float: 1
-ifloat: 1
-
-# cacos
-Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0.25 + 1.0 i) == 1.747098759571863549650000258275841544745 - 8.924633639033482359562124741744951972772e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0.25 + 1.0 i) == 1.747098759571863549650000258275841544745 - 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (-0.25 - 1.0 i) == 1.747098759571863549650000258275841544745 + 8.924633639033482359562124741744951972772e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0.25 - 1.0 i) == 1.747098759571863549650000258275841544745 + 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (-0.5 + 1.0 i) == 1.920235389652109912858733517715121394831 - 9.261330313501824245501244453057873152694e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0.5 + 1.0 i) == 1.920235389652109912858733517715121394831 - 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0.5 - 1.0 i) == 1.920235389652109912858733517715121394831 + 9.261330313501824245501244453057873152694e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0.5 - 1.0 i) == 1.920235389652109912858733517715121394831 + 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 + 0.0 i) == 3.141592653589793238462643383279502884197 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 + 0x1.fp-1025 i) == 3.141592653589793238462643383279502884197 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 + 0x1p-52 i) == 3.141592643999491532482601997450598791535 - 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 - 0.0 i) == 3.141592653589793238462643383279502884197 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 - 0x1.fp-1025 i) == 3.141592653589793238462643383279502884197 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (-0x1.0000000000001p0 - 0x1p-52 i) == 3.141592643999491532482601997450598791535 + 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: cacos (-0x1.000002p0 + 0.0 i) == 3.141592653589793238462643383279502884197 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1.fp-129 i) == 3.141592653589793238462643383279502878367 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i) == 3.141370441751352383825802745874586120521 - 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: cacos (-0x1.000002p0 - 0.0 i) == 3.141592653589793238462643383279502884197 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1.fp-129 i) == 3.141592653589793238462643383279502878367 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i) == 3.141370441751352383825802745874586120521 + 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i) == 1.572134236154454360143880041170803681211 - 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i) == 1.572134236154454360143880041170803681211 + 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0x1.fp-100 + 1.0 i) == 1.570796326794896619231321691640832196834 - 8.813735870195430252326093249797923090282e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i) == 1.570796326794896619231321691640832196834 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-100 - 1.0 i) == 1.570796326794896619231321691640832196834 + 8.813735870195430252326093249797923090282e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i) == 1.570796326794896619231321691640832196834 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i) == 1.570796326794896619231321691639751442099 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i) == 1.570796326794896619231321691639751442099 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i) == 1.570796326794896619231321691639751442099 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i) == 1.570796326794896619231321691639751442099 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i) == 1.570796326794896619231321691639751442099 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i) == 1.570796326794896619231321691639751442099 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i) == 1.570796326794896619231321691639751442101 - 8.813736713132375348727889167749389235161e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-129 + 1.0 i) == 1.570796326794896619231321691639751442101 - 8.813735870195430252326093249797923090282e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i) == 1.570796326794896619231321691639751442101 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-129 + 1.5 i) == 1.570796326794896619231321691639751442100 - 1.194763217287109304111930828519090523536 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i) == 1.570796326794896619231321691639751442100 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i) == 1.570796326794896619231321691639751442101 + 8.813736713132375348727889167749389235161e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-129 - 1.0 i) == 1.570796326794896619231321691639751442101 + 8.813735870195430252326093249797923090282e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i) == 1.570796326794896619231321691639751442101 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-129 - 1.5 i) == 1.570796326794896619231321691639751442100 + 1.194763217287109304111930828519090523536 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i) == 1.570796326794896619231321691639751442100 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (-0x1.fp-30 + 1.0 i) == 1.570796328070826603447840231892468927106 - 8.813735870195430258081932989769495326854e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i) == 1.570796328070826603447840231892468927106 - 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacos (-0x1.fp-30 - 1.0 i) == 1.570796328070826603447840231892468927106 + 8.813735870195430258081932989769495326854e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i) == 1.570796328070826603447840231892468927106 + 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-1.0 + 0.5 i) == 2.466703808003786858297978415967328452322 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i) == 3.098101355958774410750062883737683164607 - 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-100 i) == 3.141592653589792002170605123018614219682 - 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-1000 i) == 3.141592653589793238462643383279502884197 - 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-1025 i) == 3.141592653589793238462643383279502884197 - 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-129 i) == 3.141592653589793238409287030509680549213 - 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: cacos (-1.0 + 0x1.fp-30 i) == 3.141550174918818561961484385371624132331 - 4.247867098745151888768727039216644758847e-5 i":
-double: 43
-idouble: 43
-Test "Imaginary part of: cacos (-1.0 + 0x1.fp-30 i) == 3.141550174918818561961484385371624132331 - 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Real part of: cacos (-1.0 + 0x1p50 i) == 1.570796326794897507409741391764983781004 - 3.535050620855721078027883819436759661753e1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-1.0 - 0.5 i) == 2.466703808003786858297978415967328452322 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i) == 3.098101355958774410750062883737683164607 + 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-100 i) == 3.141592653589792002170605123018614219682 + 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-1000 i) == 3.141592653589793238462643383279502884197 + 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-1025 i) == 3.141592653589793238462643383279502884197 + 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-129 i) == 3.141592653589793238409287030509680549213 + 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: cacos (-1.0 - 0x1.fp-30 i) == 3.141550174918818561961484385371624132331 + 4.247867098745151888768727039216644758847e-5 i":
-double: 43
-idouble: 43
-Test "Imaginary part of: cacos (-1.0 - 0x1.fp-30 i) == 3.141550174918818561961484385371624132331 + 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Real part of: cacos (-1.0 - 0x1p50 i) == 1.570796326794897507409741391764983781004 + 3.535050620855721078027883819436759661753e1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0.25 + 1.0 i) == 1.394493894017929688812643125003661339452 - 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0.25 - 1.0 i) == 1.394493894017929688812643125003661339452 + 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (0.5 + 1.0 i) == 1.221357263937683325603909865564381489366 - 9.261330313501824245501244453057873152694e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0.5 + 1.0 i) == 1.221357263937683325603909865564381489366 - 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (0.5 - 1.0 i) == 1.221357263937683325603909865564381489366 + 9.261330313501824245501244453057873152694e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0.5 - 1.0 i) == 1.221357263937683325603909865564381489366 + 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.0000000000001p0 + 0.0 i) == 0.0 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: cacos (0x1.0000000000001p0 + 0x1.fp-1025 i) == 2.557178503953494342609835913586108008322e-301 - 2.107342425544701550354780375182800088393e-8 i":
-double: 2
-idouble: 2
-Test "Imaginary part of: cacos (0x1.0000000000001p0 + 0x1.fp-1025 i) == 2.557178503953494342609835913586108008322e-301 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (0x1.0000000000001p0 + 0x1p-52 i) == 9.590301705980041385828904092662391018164e-9 - 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: cacos (0x1.0000000000001p0 - 0.0 i) == 0.0 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: cacos (0x1.0000000000001p0 - 0x1.fp-1025 i) == 2.557178503953494342609835913586108008322e-301 + 2.107342425544701550354780375182800088393e-8 i":
-double: 2
-idouble: 2
-Test "Imaginary part of: cacos (0x1.0000000000001p0 - 0x1.fp-1025 i) == 2.557178503953494342609835913586108008322e-301 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: cacos (0x1.0000000000001p0 - 0x1p-52 i) == 9.590301705980041385828904092662391018164e-9 + 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: cacos (0x1.000002p0 + 0.0 i) == 0.0 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: cacos (0x1.000002p0 + 0x1.fp-129 i) == 5.830451806317544230969669308596361881467e-36 - 4.882812451493617206486388134172712975070e-4 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cacos (0x1.000002p0 + 0x1.fp-129 i) == 5.830451806317544230969669308596361881467e-36 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i) == 2.222118384408546368406374049167636760903e-4 - 5.364668491573609633134147164031476452679e-4 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i) == 2.222118384408546368406374049167636760903e-4 - 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: cacos (0x1.000002p0 - 0.0 i) == 0.0 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: cacos (0x1.000002p0 - 0x1.fp-129 i) == 5.830451806317544230969669308596361881467e-36 + 4.882812451493617206486388134172712975070e-4 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cacos (0x1.000002p0 - 0x1.fp-129 i) == 5.830451806317544230969669308596361881467e-36 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i) == 2.222118384408546368406374049167636760903e-4 + 5.364668491573609633134147164031476452679e-4 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i) == 2.222118384408546368406374049167636760903e-4 + 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i) == 1.569458417435338878318763342108699202986 - 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i) == 1.569458417435338878318763342108699202986 + 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i) == 1.570796326794896619231321691638670687364 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i) == 1.570796326794896619231321691638670687364 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i) == 1.570796326794896619231321691639751442099 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i) == 1.570796326794896619231321691639751442099 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i) == 1.570796326794896619231321691639751442099 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i) == 1.570796326794896619231321691639751442099 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i) == 1.570796326794896619231321691639751442099 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i) == 1.570796326794896619231321691639751442099 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i) == 1.570796326794896619231321691639751442097 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i) == 1.570796326794896619231321691639751442097 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i) == 1.570796326794896619231321691639751442097 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i) == 1.570796326794896619231321691639751442097 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i) == 1.570796325518966635014803151387033957091 - 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i) == 1.570796325518966635014803151387033957091 + 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 - 7.107906849659093345062145442726115449315e2 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 - 8.973081118419833726837456344608533993585e1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (1.0 + 0.25 i) == 4.890443302710802929202843732146540079124e-1 - 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (1.0 + 0.5 i) == 6.748888455860063801646649673121744318756e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (1.0 + 0.5 i) == 6.748888455860063801646649673121744318756e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (1.0 + 0x1.fp-10 i) == 4.349129763101882771258049954181971959031e-2 - 4.350501469856803800217957402220976497152e-2 i":
-float: 6
-ifloat: 6
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i) == 4.349129763101882771258049954181971959031e-2 - 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-100 i) == 1.236292038260260888664514866456887257525e-15 - 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-1000 i) == 4.252291453851660175550490409247739011867e-151 - 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-1025 i) == 7.340879205566679497036857179189356754017e-155 - 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-129 i) == 5.335635276982233498398987585285818977930e-20 - 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: cacos (1.0 + 0x1.fp-30 i) == 4.247867097467650115899790787875186617316e-5 - 4.247867098745151888768727039216644758847e-5 i":
-double: 2827891
-idouble: 2827891
-Test "Imaginary part of: cacos (1.0 + 0x1.fp-30 i) == 4.247867097467650115899790787875186617316e-5 - 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Real part of: cacos (1.0 - 0.25 i) == 4.890443302710802929202843732146540079124e-1 + 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: cacos (1.0 - 0.5 i) == 6.748888455860063801646649673121744318756e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacos (1.0 - 0.5 i) == 6.748888455860063801646649673121744318756e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacos (1.0 - 0x1.fp-10 i) == 4.349129763101882771258049954181971959031e-2 + 4.350501469856803800217957402220976497152e-2 i":
-float: 6
-ifloat: 6
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i) == 4.349129763101882771258049954181971959031e-2 + 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-100 i) == 1.236292038260260888664514866456887257525e-15 + 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-1000 i) == 4.252291453851660175550490409247739011867e-151 + 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-1025 i) == 7.340879205566679497036857179189356754017e-155 + 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-129 i) == 5.335635276982233498398987585285818977930e-20 + 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: cacos (1.0 - 0x1.fp-30 i) == 4.247867097467650115899790787875186617316e-5 + 4.247867098745151888768727039216644758847e-5 i":
-double: 2827891
-idouble: 2827891
-Test "Imaginary part of: cacos (1.0 - 0x1.fp-30 i) == 4.247867097467650115899790787875186617316e-5 + 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-
-# cacosh
-Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
-double: 1
-idouble: 1
-Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
-double: 1
-idouble: 1
-Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
-double: 1
-idouble: 1
-Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
-double: 1
-idouble: 1
-Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
-float: 1
-ifloat: 1
-Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
-float: 1
-ifloat: 1
-
-# casin
-Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0.25 + 1.0 i) == -1.763024327769669304186785666360901026468e-1 + 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0.25 - 1.0 i) == -1.763024327769669304186785666360901026468e-1 - 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0.5 + 1.0 i) == -3.494390628572132936274118260753699527325e-1 + 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0.5 - 1.0 i) == -3.494390628572132936274118260753699527325e-1 - 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.0000000000001p0 + 0.0 i) == -1.570796326794896619231321691639751442099 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (-0x1.0000000000001p0 + 0x1.fp-1025 i) == -1.570796326794896619231321691639751442099 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (-0x1.0000000000001p0 + 0x1p-52 i) == -1.570796317204594913251280305810847349436 + 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: casin (-0x1.0000000000001p0 - 0.0 i) == -1.570796326794896619231321691639751442099 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (-0x1.0000000000001p0 - 0x1.fp-1025 i) == -1.570796326794896619231321691639751442099 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (-0x1.0000000000001p0 - 0x1p-52 i) == -1.570796317204594913251280305810847349436 - 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: casin (-0x1.000002p0 + 0.0 i) == -1.570796326794896619231321691639751442099 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (-0x1.000002p0 + 0x1.fp-129 i) == -1.570796326794896619231321691639751436268 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i) == -1.570574114956455764594481054234834678422 + 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: casin (-0x1.000002p0 - 0.0 i) == -1.570796326794896619231321691639751442099 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (-0x1.000002p0 - 0x1.fp-129 i) == -1.570796326794896619231321691639751436268 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i) == -1.570574114956455764594481054234834678422 - 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casin (-0x1.fp-10 + 1.0 i) == -1.337909359557740912558349531052239112857e-3 + 8.813742198809567991336704287826445879025e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i) == -1.337909359557740912558349531052239112857e-3 + 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (-0x1.fp-10 - 1.0 i) == -1.337909359557740912558349531052239112857e-3 - 8.813742198809567991336704287826445879025e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i) == -1.337909359557740912558349531052239112857e-3 - 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i) == -1.080754735021050612990719608916167354321e-30 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i) == -1.080754735021050612990719608916167354321e-30 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i) == -1.278589251976747242280879285935084814093e-301 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i) == -1.278589251976747242280879285935084814093e-301 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i) == -3.810492908885321743133304375216617626230e-309 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i) == -2.989196569048182929051881765490354365918e-309 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i) == -3.810492908885321743133304375216617626230e-309 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i) == -2.989196569048182929051881765490354365918e-309 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i) == -2.013062564695348242280482517399205554874e-39 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i) == -1.579176199917649005841160751101628985741e-39 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i) == -2.013062564695348242280482517399205554874e-39 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i) == -1.579176199917649005841160751101628985741e-39 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i) == -1.275929984216518540252717485007112529021e-9 + 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i) == -1.275929984216518540252717485007112529021e-9 - 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i) == -8.429369199749229560964789467980644296420e-8 + 8.813736713132400470205730751186547909968e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i) == -8.429369199749229560964789467980644296420e-8 - 8.813736713132400470205730751186547909968e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casin (-1.0 + 0.25 i) == -1.081751996523816326311037318425097434186 + 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (-1.0 + 0.5 i) == -8.959074812088902390666567243275770102229e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-1.0 + 0.5 i) == -8.959074812088902390666567243275770102229e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i) == -1.527305029163877791518741192097931722508 + 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-100 i) == -1.570796326794895382939283431378862777584 + 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-1000 i) == -1.570796326794896619231321691639751442099 + 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-1025 i) == -1.570796326794896619231321691639751442099 + 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-129 i) == -1.570796326794896619177965338869929107115 + 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casin (-1.0 + 0x1.fp-30 i) == -1.570753848123921942730162693731872690232 + 4.247867098745151888768727039216644758847e-5 i":
-double: 86
-idouble: 86
-Test "Imaginary part of: casin (-1.0 + 0x1.fp-30 i) == -1.570753848123921942730162693731872690232 + 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Real part of: casin (-1.0 - 0.25 i) == -1.081751996523816326311037318425097434186 - 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (-1.0 - 0.5 i) == -8.959074812088902390666567243275770102229e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-1.0 - 0.5 i) == -8.959074812088902390666567243275770102229e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i) == -1.527305029163877791518741192097931722508 - 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-100 i) == -1.570796326794895382939283431378862777584 - 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-1000 i) == -1.570796326794896619231321691639751442099 - 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-1025 i) == -1.570796326794896619231321691639751442099 - 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-129 i) == -1.570796326794896619177965338869929107115 - 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casin (-1.0 - 0x1.fp-30 i) == -1.570753848123921942730162693731872690232 - 4.247867098745151888768727039216644758847e-5 i":
-double: 86
-idouble: 86
-Test "Imaginary part of: casin (-1.0 - 0x1.fp-30 i) == -1.570753848123921942730162693731872690232 - 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Imaginary part of: casin (0.25 + 1.0 i) == 1.763024327769669304186785666360901026468e-1 + 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (0.25 - 1.0 i) == 1.763024327769669304186785666360901026468e-1 - 8.924633639033482359562124741744951972772e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (0.5 + 1.0 i) == 3.494390628572132936274118260753699527325e-1 + 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0.5 - 1.0 i) == 3.494390628572132936274118260753699527325e-1 - 9.261330313501824245501244453057873152694e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.0000000000001p0 + 0.0 i) == 1.570796326794896619231321691639751442099 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (0x1.0000000000001p0 + 0x1.fp-1025 i) == 1.570796326794896619231321691639751442099 + 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (0x1.0000000000001p0 + 0x1p-52 i) == 1.570796317204594913251280305810847349436 + 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: casin (0x1.0000000000001p0 - 0.0 i) == 1.570796326794896619231321691639751442099 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (0x1.0000000000001p0 - 0x1.fp-1025 i) == 1.570796326794896619231321691639751442099 - 2.107342425544701550354780375182800088393e-8 i":
-double: 25216052
-idouble: 25216052
-Test "Imaginary part of: casin (0x1.0000000000001p0 - 0x1p-52 i) == 1.570796317204594913251280305810847349436 - 2.315303644582684770975188768022139415020e-8 i":
-double: 20798466
-idouble: 20798466
-Test "Imaginary part of: casin (0x1.000002p0 + 0.0 i) == 1.570796326794896619231321691639751442099 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (0x1.000002p0 + 0x1.fp-129 i) == 1.570796326794896619231321691639751436268 + 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i) == 1.570574114956455764594481054234834678422 + 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Imaginary part of: casin (0x1.000002p0 - 0.0 i) == 1.570796326794896619231321691639751442099 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (0x1.000002p0 - 0x1.fp-129 i) == 1.570796326794896619231321691639751436268 - 4.882812451493617206486388134172712975070e-4 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i) == 1.570574114956455764594481054234834678422 - 5.364668491573609633134147164031476452679e-4 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casin (0x1.fp-10 + 1.0 i) == 1.337909359557740912558349531052239112857e-3 + 8.813742198809567991336704287826445879025e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i) == 1.337909359557740912558349531052239112857e-3 + 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (0x1.fp-10 - 1.0 i) == 1.337909359557740912558349531052239112857e-3 - 8.813742198809567991336704287826445879025e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i) == 1.337909359557740912558349531052239112857e-3 - 8.813742198809567991336704287826445879025e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i) == 1.080754735021050612990719608916167354321e-30 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i) == 1.080754735021050612990719608916167354321e-30 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i) == 1.278589251976747242280879285935084814093e-301 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i) == 1.278589251976747242280879285935084814093e-301 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i) == 3.810492908885321743133304375216617626230e-309 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i) == 2.989196569048182929051881765490354365918e-309 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i) == 3.810492908885321743133304375216617626230e-309 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i) == 2.989196569048182929051881765490354365918e-309 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i) == 2.013062564695348242280482517399205554874e-39 + 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i) == 1.579176199917649005841160751101628985741e-39 + 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i) == 2.013062564695348242280482517399205554874e-39 - 8.813735870195430252326093249797923090282e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i) == 1.579176199917649005841160751101628985741e-39 - 1.194763217287109304111930828519090523536 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i) == 1.275929984216518540252717485007112529021e-9 + 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i) == 1.275929984216518540252717485007112529021e-9 - 8.813735870195430258081932989769495326854e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 + 7.107906849659093345062145442726115449315e2 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 + 8.973081118419833726837456344608533993585e1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i) == 8.429369199749229560964789467980644296420e-8 + 8.813736713132400470205730751186547909968e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i) == 8.429369199749229560964789467980644296420e-8 - 8.813736713132400470205730751186547909968e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casin (1.0 + 0.25 i) == 1.081751996523816326311037318425097434186 + 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (1.0 + 0.5 i) == 8.959074812088902390666567243275770102229e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (1.0 + 0.5 i) == 8.959074812088902390666567243275770102229e-1 + 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i) == 1.527305029163877791518741192097931722508 + 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: casin (1.0 + 0x1.fp-100 i) == 1.570796326794895382939283431378862777584 + 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: casin (1.0 + 0x1.fp-1000 i) == 1.570796326794896619231321691639751442099 + 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: casin (1.0 + 0x1.fp-1025 i) == 1.570796326794896619231321691639751442099 + 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: casin (1.0 + 0x1.fp-129 i) == 1.570796326794896619177965338869929107115 + 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casin (1.0 + 0x1.fp-30 i) == 1.570753848123921942730162693731872690232 + 4.247867098745151888768727039216644758847e-5 i":
-double: 86
-idouble: 86
-Test "Imaginary part of: casin (1.0 + 0x1.fp-30 i) == 1.570753848123921942730162693731872690232 + 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Real part of: casin (1.0 - 0.25 i) == 1.081751996523816326311037318425097434186 - 5.097911466811016354623559941115413499164e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casin (1.0 - 0.5 i) == 8.959074812088902390666567243275770102229e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (1.0 - 0.5 i) == 8.959074812088902390666567243275770102229e-1 - 7.328576759736452608886724437653071523305e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i) == 1.527305029163877791518741192097931722508 - 4.350501469856803800217957402220976497152e-2 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Imaginary part of: casin (1.0 - 0x1.fp-100 i) == 1.570796326794895382939283431378862777584 - 1.236292038260260888664514866457202186027e-15 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Imaginary part of: casin (1.0 - 0x1.fp-1000 i) == 1.570796326794896619231321691639751442099 - 4.252291453851660175550490409247739011867e-151 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Imaginary part of: casin (1.0 - 0x1.fp-1025 i) == 1.570796326794896619231321691639751442099 - 7.340879205566679497036857179189356754017e-155 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Imaginary part of: casin (1.0 - 0x1.fp-129 i) == 1.570796326794896619177965338869929107115 - 5.335635276982233498398987585285818977933e-20 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casin (1.0 - 0x1.fp-30 i) == 1.570753848123921942730162693731872690232 - 4.247867098745151888768727039216644758847e-5 i":
-double: 86
-idouble: 86
-Test "Imaginary part of: casin (1.0 - 0x1.fp-30 i) == 1.570753848123921942730162693731872690232 - 4.247867098745151888768727039216644758847e-5 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-
-# casinh
-Test "Real part of: casinh (-0.0 + 0x1.0000000000001p0 i) == -2.107342425544701550354780375182800088393e-8 + 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (-0.0 + 0x1.000002p0 i) == -4.882812451493617206486388134172712975070e-4 + 1.570796326794896619231321691639751442099 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (-0.0 - 0x1.0000000000001p0 i) == -2.107342425544701550354780375182800088393e-8 - 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (-0.0 - 0x1.000002p0 i) == -4.882812451493617206486388134172712975070e-4 - 1.570796326794896619231321691639751442099 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casinh (-0.25 + 1.0 i) == -5.097911466811016354623559941115413499164e-1 + 1.081751996523816326311037318425097434186 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (-0.25 - 1.0 i) == -5.097911466811016354623559941115413499164e-1 - 1.081751996523816326311037318425097434186 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-0.5 + 1.0 i) == -7.328576759736452608886724437653071523305e-1 + 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (-0.5 + 1.0 i) == -7.328576759736452608886724437653071523305e-1 + 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-0.5 - 1.0 i) == -7.328576759736452608886724437653071523305e-1 - 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (-0.5 - 1.0 i) == -7.328576759736452608886724437653071523305e-1 - 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i) == -8.813736713132400470205730751186547909968e-1 + 8.429369199749229560964789467980644296420e-8 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i) == -8.813736713132400470205730751186547909968e-1 - 8.429369199749229560964789467980644296420e-8 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-0x1.fp-10 + 1.0 i) == -4.350501469856803800217957402220976497152e-2 + 1.527305029163877791518741192097931722508 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Real part of: casinh (-0x1.fp-10 - 1.0 i) == -4.350501469856803800217957402220976497152e-2 - 1.527305029163877791518741192097931722508 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Real part of: casinh (-0x1.fp-100 + 1.0 i) == -1.236292038260260888664514866457202186027e-15 + 1.570796326794895382939283431378862777584 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Real part of: casinh (-0x1.fp-100 - 1.0 i) == -1.236292038260260888664514866457202186027e-15 - 1.570796326794895382939283431378862777584 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Real part of: casinh (-0x1.fp-1000 + 1.0 i) == -4.252291453851660175550490409247739011867e-151 + 1.570796326794896619231321691639751442099 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Real part of: casinh (-0x1.fp-1000 - 1.0 i) == -4.252291453851660175550490409247739011867e-151 - 1.570796326794896619231321691639751442099 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Real part of: casinh (-0x1.fp-1025 + 0x1.0000000000001p0 i) == -2.107342425544701550354780375182800088393e-8 + 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (-0x1.fp-1025 + 1.0 i) == -7.340879205566679497036857179189356754017e-155 + 1.570796326794896619231321691639751442099 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Real part of: casinh (-0x1.fp-1025 - 0x1.0000000000001p0 i) == -2.107342425544701550354780375182800088393e-8 - 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (-0x1.fp-1025 - 1.0 i) == -7.340879205566679497036857179189356754017e-155 - 1.570796326794896619231321691639751442099 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Real part of: casinh (-0x1.fp-129 + 0x1.000002p0 i) == -4.882812451493617206486388134172712975070e-4 + 1.570796326794896619231321691639751436268 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (-0x1.fp-129 + 1.0 i) == -5.335635276982233498398987585285818977933e-20 + 1.570796326794896619177965338869929107115 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casinh (-0x1.fp-129 - 0x1.000002p0 i) == -4.882812451493617206486388134172712975070e-4 - 1.570796326794896619231321691639751436268 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (-0x1.fp-129 - 1.0 i) == -5.335635276982233498398987585285818977933e-20 - 1.570796326794896619177965338869929107115 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casinh (-0x1.fp-30 + 1.0 i) == -4.247867098745151888768727039216644758847e-5 + 1.570753848123921942730162693731872690232 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Imaginary part of: casinh (-0x1.fp-30 + 1.0 i) == -4.247867098745151888768727039216644758847e-5 + 1.570753848123921942730162693731872690232 i":
-double: 86
-idouble: 86
-Test "Real part of: casinh (-0x1.fp-30 - 1.0 i) == -4.247867098745151888768727039216644758847e-5 - 1.570753848123921942730162693731872690232 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Imaginary part of: casinh (-0x1.fp-30 - 1.0 i) == -4.247867098745151888768727039216644758847e-5 - 1.570753848123921942730162693731872690232 i":
-double: 86
-idouble: 86
-Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i) == -5.364668491573609633134147164031476452679e-4 + 1.570574114956455764594481054234834678422 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i) == -5.364668491573609633134147164031476452679e-4 - 1.570574114956455764594481054234834678422 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casinh (-0x1p-52 + 0x1.0000000000001p0 i) == -2.315303644582684770975188768022139415020e-8 + 1.570796317204594913251280305810847349436 i":
-double: 20798466
-idouble: 20798466
-Test "Real part of: casinh (-0x1p-52 - 0x1.0000000000001p0 i) == -2.315303644582684770975188768022139415020e-8 - 1.570796317204594913251280305810847349436 i":
-double: 20798466
-idouble: 20798466
-Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 + 0.25 i) == -8.924633639033482359562124741744951972772e-1 + 1.763024327769669304186785666360901026468e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 + 0.5 i) == -9.261330313501824245501244453057873152694e-1 + 3.494390628572132936274118260753699527325e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-10 i) == -8.813742198809567991336704287826445879025e-1 + 1.337909359557740912558349531052239112857e-3 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i) == -8.813742198809567991336704287826445879025e-1 + 1.337909359557740912558349531052239112857e-3 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-100 i) == -8.813735870195430252326093249797923090282e-1 + 1.080754735021050612990719608916167354321e-30 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i) == -8.813735870195430252326093249797923090282e-1 + 1.278589251976747242280879285935084814093e-301 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i) == -8.813735870195430252326093249797923090282e-1 + 3.810492908885321743133304375216617626230e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-129 i) == -8.813735870195430252326093249797923090282e-1 + 2.013062564695348242280482517399205554874e-39 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 + 0x1.fp-30 i) == -8.813735870195430258081932989769495326854e-1 + 1.275929984216518540252717485007112529021e-9 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0.25 i) == -8.924633639033482359562124741744951972772e-1 - 1.763024327769669304186785666360901026468e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0.5 i) == -9.261330313501824245501244453057873152694e-1 - 3.494390628572132936274118260753699527325e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-10 i) == -8.813742198809567991336704287826445879025e-1 - 1.337909359557740912558349531052239112857e-3 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i) == -8.813742198809567991336704287826445879025e-1 - 1.337909359557740912558349531052239112857e-3 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-100 i) == -8.813735870195430252326093249797923090282e-1 - 1.080754735021050612990719608916167354321e-30 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i) == -8.813735870195430252326093249797923090282e-1 - 1.278589251976747242280879285935084814093e-301 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i) == -8.813735870195430252326093249797923090282e-1 - 3.810492908885321743133304375216617626230e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-129 i) == -8.813735870195430252326093249797923090282e-1 - 2.013062564695348242280482517399205554874e-39 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.0 - 0x1.fp-30 i) == -8.813735870195430258081932989769495326854e-1 - 1.275929984216518540252717485007112529021e-9 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i) == -1.194763217287109304111930828519090523536 + 2.989196569048182929051881765490354365918e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.5 + 0x1.fp-129 i) == -1.194763217287109304111930828519090523536 + 1.579176199917649005841160751101628985741e-39 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i) == -1.194763217287109304111930828519090523536 - 2.989196569048182929051881765490354365918e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (-1.5 - 0x1.fp-129 i) == -1.194763217287109304111930828519090523536 - 1.579176199917649005841160751101628985741e-39 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (0.0 + 0x1.0000000000001p0 i) == 2.107342425544701550354780375182800088393e-8 + 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (0.0 + 0x1.000002p0 i) == 4.882812451493617206486388134172712975070e-4 + 1.570796326794896619231321691639751442099 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (0.0 - 0x1.0000000000001p0 i) == 2.107342425544701550354780375182800088393e-8 - 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (0.0 - 0x1.000002p0 i) == 4.882812451493617206486388134172712975070e-4 - 1.570796326794896619231321691639751442099 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Imaginary part of: casinh (0.25 + 1.0 i) == 5.097911466811016354623559941115413499164e-1 + 1.081751996523816326311037318425097434186 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (0.25 - 1.0 i) == 5.097911466811016354623559941115413499164e-1 - 1.081751996523816326311037318425097434186 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (0.5 + 1.0 i) == 7.328576759736452608886724437653071523305e-1 + 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (0.5 + 1.0 i) == 7.328576759736452608886724437653071523305e-1 + 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (0.5 - 1.0 i) == 7.328576759736452608886724437653071523305e-1 - 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (0.5 - 1.0 i) == 7.328576759736452608886724437653071523305e-1 - 8.959074812088902390666567243275770102229e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i) == 8.813736713132400470205730751186547909968e-1 + 8.429369199749229560964789467980644296420e-8 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i) == 8.813736713132400470205730751186547909968e-1 - 8.429369199749229560964789467980644296420e-8 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (0x1.fp-10 + 1.0 i) == 4.350501469856803800217957402220976497152e-2 + 1.527305029163877791518741192097931722508 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Real part of: casinh (0x1.fp-10 - 1.0 i) == 4.350501469856803800217957402220976497152e-2 - 1.527305029163877791518741192097931722508 i":
-double: 6
-float: 17
-idouble: 6
-ifloat: 17
-Test "Real part of: casinh (0x1.fp-100 + 1.0 i) == 1.236292038260260888664514866457202186027e-15 + 1.570796326794895382939283431378862777584 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Real part of: casinh (0x1.fp-100 - 1.0 i) == 1.236292038260260888664514866457202186027e-15 - 1.570796326794895382939283431378862777584 i":
-double: 486654063623740
-float: 11676448
-idouble: 486654063623740
-ifloat: 11676448
-Test "Real part of: casinh (0x1.fp-1000 + 1.0 i) == 4.252291453851660175550490409247739011867e-151 + 1.570796326794896619231321691639751442099 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Real part of: casinh (0x1.fp-1000 - 1.0 i) == 4.252291453851660175550490409247739011867e-151 - 1.570796326794896619231321691639751442099 i":
-double: 6268745377432003
-idouble: 6268745377432003
-Test "Real part of: casinh (0x1.fp-1025 + 0x1.0000000000001p0 i) == 2.107342425544701550354780375182800088393e-8 + 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (0x1.fp-1025 + 1.0 i) == 7.340879205566679497036857179189356754017e-155 + 1.570796326794896619231321691639751442099 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Real part of: casinh (0x1.fp-1025 - 0x1.0000000000001p0 i) == 2.107342425544701550354780375182800088393e-8 - 1.570796326794896619231321691639751442099 i":
-double: 25216052
-idouble: 25216052
-Test "Real part of: casinh (0x1.fp-1025 - 1.0 i) == 7.340879205566679497036857179189356754017e-155 - 1.570796326794896619231321691639751442099 i":
-double: 8865344731827986
-idouble: 8865344731827986
-Test "Real part of: casinh (0x1.fp-129 + 0x1.000002p0 i) == 4.882812451493617206486388134172712975070e-4 + 1.570796326794896619231321691639751436268 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (0x1.fp-129 + 1.0 i) == 5.335635276982233498398987585285818977933e-20 + 1.570796326794896619177965338869929107115 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casinh (0x1.fp-129 - 0x1.000002p0 i) == 4.882812451493617206486388134172712975070e-4 - 1.570796326794896619231321691639751436268 i":
-double: 4
-float: 2
-idouble: 4
-ifloat: 2
-Test "Real part of: casinh (0x1.fp-129 - 1.0 i) == 5.335635276982233498398987585285818977933e-20 - 1.570796326794896619177965338869929107115 i":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-Test "Real part of: casinh (0x1.fp-30 + 1.0 i) == 4.247867098745151888768727039216644758847e-5 + 1.570753848123921942730162693731872690232 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Imaginary part of: casinh (0x1.fp-30 + 1.0 i) == 4.247867098745151888768727039216644758847e-5 + 1.570753848123921942730162693731872690232 i":
-double: 86
-idouble: 86
-Test "Real part of: casinh (0x1.fp-30 - 1.0 i) == 4.247867098745151888768727039216644758847e-5 - 1.570753848123921942730162693731872690232 i":
-double: 2843582
-float: 11039
-idouble: 2843582
-ifloat: 11039
-Test "Imaginary part of: casinh (0x1.fp-30 - 1.0 i) == 4.247867098745151888768727039216644758847e-5 - 1.570753848123921942730162693731872690232 i":
-double: 86
-idouble: 86
-Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i) == 7.107906849659093345062145442726115449315e2 + 7.853981633974483096156608458198757210493e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i) == 8.973081118419833726837456344608533993585e1 + 7.853981633974483096156608458198757210493e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i) == 5.364668491573609633134147164031476452679e-4 + 1.570574114956455764594481054234834678422 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i) == 5.364668491573609633134147164031476452679e-4 - 1.570574114956455764594481054234834678422 i":
-double: 327
-float: 431
-idouble: 327
-ifloat: 431
-Test "Real part of: casinh (0x1p-52 + 0x1.0000000000001p0 i) == 2.315303644582684770975188768022139415020e-8 + 1.570796317204594913251280305810847349436 i":
-double: 20798466
-idouble: 20798466
-Test "Real part of: casinh (0x1p-52 - 0x1.0000000000001p0 i) == 2.315303644582684770975188768022139415020e-8 - 1.570796317204594913251280305810847349436 i":
-double: 20798466
-idouble: 20798466
-Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 + 0.25 i) == 8.924633639033482359562124741744951972772e-1 + 1.763024327769669304186785666360901026468e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 + 0.5 i) == 9.261330313501824245501244453057873152694e-1 + 3.494390628572132936274118260753699527325e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-10 i) == 8.813742198809567991336704287826445879025e-1 + 1.337909359557740912558349531052239112857e-3 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i) == 8.813742198809567991336704287826445879025e-1 + 1.337909359557740912558349531052239112857e-3 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-100 i) == 8.813735870195430252326093249797923090282e-1 + 1.080754735021050612990719608916167354321e-30 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-1000 i) == 8.813735870195430252326093249797923090282e-1 + 1.278589251976747242280879285935084814093e-301 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-1025 i) == 8.813735870195430252326093249797923090282e-1 + 3.810492908885321743133304375216617626230e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-129 i) == 8.813735870195430252326093249797923090282e-1 + 2.013062564695348242280482517399205554874e-39 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 + 0x1.fp-30 i) == 8.813735870195430258081932989769495326854e-1 + 1.275929984216518540252717485007112529021e-9 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0.25 i) == 8.924633639033482359562124741744951972772e-1 - 1.763024327769669304186785666360901026468e-1 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0.5 i) == 9.261330313501824245501244453057873152694e-1 - 3.494390628572132936274118260753699527325e-1 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-10 i) == 8.813742198809567991336704287826445879025e-1 - 1.337909359557740912558349531052239112857e-3 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i) == 8.813742198809567991336704287826445879025e-1 - 1.337909359557740912558349531052239112857e-3 i":
-float: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-100 i) == 8.813735870195430252326093249797923090282e-1 - 1.080754735021050612990719608916167354321e-30 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-1000 i) == 8.813735870195430252326093249797923090282e-1 - 1.278589251976747242280879285935084814093e-301 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-1025 i) == 8.813735870195430252326093249797923090282e-1 - 3.810492908885321743133304375216617626230e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-129 i) == 8.813735870195430252326093249797923090282e-1 - 2.013062564695348242280482517399205554874e-39 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.0 - 0x1.fp-30 i) == 8.813735870195430258081932989769495326854e-1 - 1.275929984216518540252717485007112529021e-9 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.5 + 0x1.fp-1025 i) == 1.194763217287109304111930828519090523536 + 2.989196569048182929051881765490354365918e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.5 + 0x1.fp-129 i) == 1.194763217287109304111930828519090523536 + 1.579176199917649005841160751101628985741e-39 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.5 - 0x1.fp-1025 i) == 1.194763217287109304111930828519090523536 - 2.989196569048182929051881765490354365918e-309 i":
-double: 1
-idouble: 1
-Test "Real part of: casinh (1.5 - 0x1.fp-129 i) == 1.194763217287109304111930828519090523536 - 1.579176199917649005841160751101628985741e-39 i":
-double: 1
-idouble: 1
-
-# catan
-Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# catanh
-Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
-double: 4
-idouble: 4
-Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
-double: 1
-idouble: 1
-
-# cbrt
-Test "cbrt (-27.0) == -3.0":
-double: 1
-idouble: 1
-Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
-double: 1
-idouble: 1
-Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
-double: 1
-idouble: 1
-
-# ccos
-Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
-float: 1
-ifloat: 1
-Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i":
-double: 1
-idouble: 1
-
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-
-# cexp
-Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
-double: 1
-idouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i":
-double: 1
-idouble: 1
-Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
-double: 1
-idouble: 1
-Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
-double: 1
-idouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
-double: 1
-idouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
-float: 2
-ifloat: 2
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i":
-double: 1
-idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
-double: 1
-idouble: 1
-Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
-float: 1
-ifloat: 1
-
-# clog10
-Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
-double: 2
-idouble: 2
-Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
-double: 2
-idouble: 2
-Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
-double: 1
-idouble: 1
-Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
-float: 1
-ifloat: 1
-
-# cos
-Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01":
-float: 1
-ifloat: 1
-Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01":
-float: 1
-ifloat: 1
-Test "cos (M_PI_6l * 2.0) == 0.5":
-double: 1
-idouble: 1
-Test "cos (M_PI_6l * 4.0) == -0.5":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-# cos_tonearest
-Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
-float: 1
-ifloat: 1
-
-# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
-float: 1
-ifloat: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
-double: 2
-float: 3
-idouble: 2
-ifloat: 3
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-# csin
-Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
-double: 1
-idouble: 1
-Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
-double: 1
-idouble: 1
-Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
-double: 1
-idouble: 1
-Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
-double: 1
-idouble: 1
-Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i":
-double: 1
-idouble: 1
-
-# csinh
-Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
-float: 1
-ifloat: 1
-
-# csqrt
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i":
-double: 1
-idouble: 1
-Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
-double: 1
-idouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
-double: 1
-idouble: 1
-Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i":
-double: 1
-idouble: 1
-Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i":
-double: 1
-idouble: 1
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i":
-float: 1
-ifloat: 1
-
-# ctan_tonearest
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
-float: 1
-ifloat: 1
-
-# ctanh
-Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
-float: 2
-ifloat: 2
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i":
-double: 1
-idouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i":
-double: 1
-idouble: 1
-
-# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
-float: 1
-ifloat: 1
-
-# erf
-Test "erf (1.25) == 0.922900128256458230136523481197281140":
-double: 1
-idouble: 1
-
-# erfc
-Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
-double: 1
-idouble: 1
-Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
-float: 1
-ifloat: 1
-Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
-double: 1
-idouble: 1
-Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
-double: 1
-idouble: 1
-
-# exp10
-Test "exp10 (-1) == 0.1":
-double: 1
-idouble: 1
-Test "exp10 (-305) == 1.0e-305":
-double: 1
-idouble: 1
-Test "exp10 (-36) == 1.0e-36":
-double: 1
-idouble: 1
-Test "exp10 (3) == 1000":
-double: 1
-idouble: 1
-Test "exp10 (36) == 1.0e36":
-double: 1
-idouble: 1
-
-# expm1
-Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
-double: 1
-idouble: 1
-Test "expm1 (1) == M_El - 1.0":
-float: 1
-ifloat: 1
-Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217":
-double: 1
-idouble: 1
-
-# fma
-Test "fma (-0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983) == 0x1.7ffffe00007ffp-983":
-double: 1
-idouble: 1
-Test "fma (0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300) == 0x1.fffffffffffffp-1":
-double: 1
-idouble: 1
-Test "fma (0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022) == -0x0.b22757123bbe9p-1022":
-double: 1
-idouble: 1
-Test "fma (0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000003p-1022":
-double: 1
-idouble: 1
-Test "fma (0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24) == 0x1.7ff802p+13":
-float: 1
-ifloat: 1
-Test "fma (0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000001p-1022":
-double: 1
-idouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
-float: 1
-ifloat: 1
-
-# j0
-Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
-float: 2
-ifloat: 2
-Test "j0 (10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "j0 (2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "j0 (8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-
-# j1
-Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
-double: 1
-idouble: 1
-Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
-double: 1
-idouble: 1
-Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-Test "j1 (2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "j1 (8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-
-# jn
-Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
-float: 2
-ifloat: 2
-Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
-float: 1
-ifloat: 1
-Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
-float: 2
-ifloat: 2
-Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
-double: 1
-idouble: 1
-Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
-double: 1
-idouble: 1
-Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
-float: 1
-ifloat: 1
-Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
-double: 3
-idouble: 3
-Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
-double: 1
-idouble: 1
-Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
-Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# lgamma
-Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# log10
-Test "log10 (0.75) == -0.124938736608299953132449886193870744":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "log10 (e) == log10(e)":
-float: 1
-ifloat: 1
-
-# log1p
-Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
-float: 1
-ifloat: 1
-
-# pow
-Test "pow (0x0.ffffffp0, -0x1p24) == 2.7182819094701610539628664526874952929416":
-float: 1
-ifloat: 1
-Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744":
-float: 1
-ifloat: 1
-Test "pow (0x1.000002p0, 0x1p24) == 7.3890552180866447284268641248075832310141":
-float: 1
-ifloat: 1
-
-# sin_tonearest
-Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
-float: 1
-ifloat: 1
-
-# sincos
-Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res":
-float: 1
-ifloat: 1
-Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res":
-float: 1
-ifloat: 1
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
-double: 1
-idouble: 1
-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
-float: 1
-ifloat: 1
-
-# tgamma
-Test "tgamma (-0.5) == -2 sqrt (pi)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (0.5) == sqrt (pi)":
-float: 1
-ifloat: 1
-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# y0
-Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
-double: 1
-idouble: 1
-Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
-double: 1
-idouble: 1
-Test "y0 (0x1p-10) == -4.4865150767109739412411806297168793661098":
-double: 1
-idouble: 1
-Test "y0 (0x1p-110) == -4.861363632869203777249475899390797503250e+1":
-double: 1
-idouble: 1
-Test "y0 (0x1p-20) == -8.8992283012125827603076426611387876938160":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-30) == -1.3311940304267782826037118027401817264906e+1":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-40) == -1.7724652307320814696990854700366226762563e+1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y0 (0x1p-50) == -2.2137364310373846564919987139743760738155e+1":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-70) == -3.0962788316479910300778244424468159753887e+1":
-double: 1
-idouble: 1
-Test "y0 (0x1p-80) == -3.5375500319532942168707373066828113573541e+1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-Test "y0 (8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# y1
-Test "y1 (0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
-double: 1
-idouble: 1
-Test "y1 (0x1p-10) == -6.5190099301063115047395187618929589514382e+02":
-double: 1
-idouble: 1
-Test "y1 (1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-Test "y1 (10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "y1 (2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y1 (8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# yn
-Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
-float: 1
-ifloat: 1
-Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
-double: 1
-idouble: 1
-Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
-float: 1
-ifloat: 1
-Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
-double: 1
-idouble: 1
-Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
-double: 1
-idouble: 1
-Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
-double: 2
-idouble: 2
-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
-double: 1
-idouble: 1
-Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
-double: 1
-idouble: 1
-
-# Maximal error of functions:
-Function: "atan2":
-float: 1
-ifloat: 1
-
-Function: "atanh":
-float: 1
-ifloat: 1
-
-Function: Real part of "cacos":
-double: 2827891
-float: 6
-idouble: 2827891
-ifloat: 6
-
-Function: Imaginary part of "cacos":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-
-Function: Real part of "cacosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "casin":
-double: 86
-float: 1
-idouble: 86
-ifloat: 1
-
-Function: Imaginary part of "casin":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-
-Function: Real part of "casinh":
-double: 8865344731827986
-float: 16512991
-idouble: 8865344731827986
-ifloat: 16512991
-
-Function: Imaginary part of "casinh":
-double: 86
-float: 1
-idouble: 86
-ifloat: 1
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "catanh":
-double: 4
-idouble: 4
-
-Function: "cbrt":
-double: 1
-idouble: 1
-
-Function: Real part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "cexp":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Imaginary part of "cexp":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "clog":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "clog":
-float: 1
-ifloat: 1
-
-Function: Real part of "clog10":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "clog10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "cos":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "cos_tonearest":
-float: 1
-ifloat: 1
-
-Function: Real part of "cpow":
-double: 2
-float: 4
-idouble: 2
-ifloat: 4
-
-Function: Imaginary part of "cpow":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Real part of "csin":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csqrt":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "csqrt":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-
-Function: Real part of "ctan_tonearest":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "ctan_tonearest":
-float: 1
-ifloat: 1
-
-Function: Real part of "ctanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ctanh":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: Real part of "ctanh_tonearest":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
-
-Function: "erf":
-double: 1
-idouble: 1
-
-Function: "erfc":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "exp10":
-double: 1
-idouble: 1
-
-Function: "expm1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "fma":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "hypot":
-float: 1
-ifloat: 1
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "jn":
-double: 4
-float: 5
-idouble: 4
-ifloat: 5
-
-Function: "lgamma":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "log10":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "log1p":
-float: 1
-ifloat: 1
-
-Function: "pow":
-float: 1
-ifloat: 1
-
-Function: "sin_tonearest":
-float: 1
-ifloat: 1
-
-Function: "sincos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "tan":
-double: 1
-idouble: 1
-
-Function: "tgamma":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-# end of automatic generation
diff --git a/libc/ports/sysdeps/tile/libm-test-ulps b/libc/ports/sysdeps/tile/libm-test-ulps
index d95f69946..60bdc4758 100644
--- a/libc/ports/sysdeps/tile/libm-test-ulps
+++ b/libc/ports/sysdeps/tile/libm-test-ulps
@@ -1,21 +1,52 @@
# Begin of automatic generation
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xap+0)":
+float: 1
+ifloat: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
+
# atan2
-Test "atan2 (-0.75, -1.0)":
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
float: 1
ifloat: 1
-Test "atan2 (-max_value, -min_value)":
+Test "atan2 (0xcp-4, -0x1p+0)":
float: 1
ifloat: 1
-Test "atan2 (0.75, -1.0)":
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
float: 1
ifloat: 1
-Test "atan2 (1.390625, 0.9296875)":
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
float: 1
ifloat: 1
# atanh
-Test "atanh (0.75)":
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
+Test "atanh (0xcp-4)":
float: 1
ifloat: 1
@@ -2599,192 +2630,571 @@ float: 1
ifloat: 1
# cbrt
-Test "cbrt (-27.0)":
+Test "cbrt (-0x1.bp+4)":
double: 1
idouble: 1
-Test "cbrt (0.75)":
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+Test "cbrt (0xcp-4)":
double: 1
idouble: 1
-Test "cbrt (0.9921875)":
+Test "cbrt (0xf.ep-4)":
double: 1
idouble: 1
# ccos
-Test "Imaginary part of: ccos (-0.75 + 710.5 i)":
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (-0.75 + 89.5 i)":
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (-0.75 - 710.5 i)":
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (-0.75 - 89.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 710.5 i)":
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (0.75 + 89.5 i)":
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-Test "Imaginary part of: ccos (0.75 - 710.5 i)":
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (0.75 - 89.5 i)":
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)":
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
double: 1
idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i)":
+# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-710.5 + 0.75 i)":
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (-710.5 - 0.75 i)":
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
double: 1
+float: 1
idouble: 1
-Test "Imaginary part of: ccosh (-89.5 + 0.75 i)":
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (-89.5 - 0.75 i)":
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Real part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)":
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (710.5 + 0.75 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (710.5 - 0.75 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (89.5 + 0.75 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (89.5 - 0.75 i)":
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
-
-# cexp
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (-95 + 0.75 i)":
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i)":
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)":
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (50 + 0x1p127 i)":
-double: 2
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
float: 1
-idouble: 2
ifloat: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i)":
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (500 + 0x1p1023 i)":
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (709.8125 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i)":
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i)":
-float: 2
-ifloat: 2
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)":
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)":
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)":
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)":
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)":
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)":
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (0x1p-147 + 0x1p-147 i)":
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)":
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
float: 1
ifloat: 1
@@ -3064,45 +3474,86 @@ ifloat: 1
Test "cos (0x1p+120)":
float: 1
ifloat: 1
-Test "cos (0x1p+127)":
+Test "cos (0x7p+0)":
float: 1
ifloat: 1
-Test "cos (M_PI_6l * 2.0)":
-double: 1
-idouble: 1
-Test "cos (M_PI_6l * 4.0)":
-double: 2
+Test "cos (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos (0xc.d4967p-4)":
float: 1
-idouble: 2
ifloat: 1
# cos_tonearest
-Test "cos_tonearest (7)":
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xc.d4967p-4)":
float: 1
ifloat: 1
-# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
+# cosh
+Test "cosh (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
float: 1
ifloat: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cpow
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
double: 2
float: 3
idouble: 2
ifloat: 3
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 2
-ifloat: 2
# csin
Test "Real part of: csin (-0.75 + 710.5 i)":
@@ -3172,935 +3623,1468 @@ float: 1
ifloat: 1
# csqrt
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
double: 1
idouble: 1
-Test "Real part of: csqrt (-2 + 3 i)":
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
float: 1
ifloat: 1
-Test "Real part of: csqrt (-2 - 3 i)":
+
+# ctan
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)":
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
double: 1
+float: 1
idouble: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i)":
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan (-2 - 3 i)":
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctan (0x1p1023 + 1 i)":
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0x1p127 + 1 i)":
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
# ctan_tonearest
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)":
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Real part of: ctanh (0.75 + 1.25 i)":
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
-float: 2
-ifloat: 2
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
double: 1
idouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i)":
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-
-# erf
-Test "erf (1.25)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
double: 1
idouble: 1
-
-# erfc
-Test "erfc (0x1.f7303cp+1)":
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
double: 1
+float: 1
idouble: 1
-Test "erfc (0x1.ffa002p+2)":
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "erfc (2.0)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
double: 1
idouble: 1
-Test "erfc (4.125)":
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
-
-# exp10
-Test "exp10 (-1)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
double: 1
idouble: 1
-Test "exp10 (-305)":
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
+float: 1
idouble: 1
-Test "exp10 (-36)":
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
double: 1
idouble: 1
-Test "exp10 (3)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-Test "exp10 (36)":
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-
-# expm1
-Test "expm1 (0.75)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-Test "expm1 (1)":
-float: 1
-ifloat: 1
-Test "expm1 (500.0)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
idouble: 1
-
-# gamma
-Test "gamma (0.7)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "gamma (1.2)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-
-# hypot
-Test "hypot (-0.7, -12.4)":
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "hypot (-0.7, 12.4)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
-Test "hypot (-12.4, -0.7)":
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-12.4, 0.7)":
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# erf
+Test "erf (0x1.4p+0)":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (-0x8p-4)":
float: 1
ifloat: 1
-Test "hypot (0.7, -12.4)":
+Test "erfc (0x2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x7.fe8008p+0)":
float: 1
ifloat: 1
-Test "hypot (0.7, 12.4)":
+Test "erfc (0x7.fffd6p+0)":
float: 1
ifloat: 1
-Test "hypot (12.4, -0.7)":
+
+# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x3p+0)":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (12.4, 0.7)":
+Test "expm1 (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
+double: 1
+idouble: 1
-# j0
-Test "j0 (-4.0)":
+# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (0.75)":
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "gamma (0x4p-12)":
float: 1
ifloat: 1
-Test "j0 (0x1.d7ce3ap+107)":
-float: 2
-ifloat: 2
-Test "j0 (10.0)":
-double: 2
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+
+# j0
+Test "j0 (-0x4p+0)":
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
-Test "j0 (2.0)":
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "j0 (0x2p+0)":
float: 2
ifloat: 2
-Test "j0 (4.0)":
+Test "j0 (0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (8.0)":
+Test "j0 (0x8p+0)":
float: 1
ifloat: 1
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
# j1
-Test "j1 (0x1.3ffp+74)":
+Test "j1 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
-Test "j1 (0x1.ff00000000002p+840)":
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
double: 1
idouble: 1
-Test "j1 (10.0)":
+Test "j1 (0x8p+0)":
+double: 1
+idouble: 1
+Test "j1 (0xap+0)":
float: 2
ifloat: 2
-Test "j1 (2.0)":
+Test "j1 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "j1 (8.0)":
+Test "j1 (0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
# jn
-Test "jn (0, -4.0)":
+Test "jn (0, -0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 0.75)":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "jn (0, 2.0)":
+Test "jn (0, 0x2p+0)":
float: 2
ifloat: 2
-Test "jn (0, 4.0)":
+Test "jn (0, 0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 8.0)":
+Test "jn (0, 0x8p+0)":
float: 1
ifloat: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
-Test "jn (1, 2.0)":
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x2p+0)":
double: 1
idouble: 1
-Test "jn (1, 8.0)":
+Test "jn (1, 0x8p+0)":
double: 1
idouble: 1
-Test "jn (10, 0.125)":
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (10, 0.75)":
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "jn (10, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (10, 10.0)":
-double: 4
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
float: 3
-idouble: 4
+idouble: 1
ifloat: 3
-Test "jn (10, 2.0)":
+Test "jn (2, 0x8p+124)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-Test "jn (2, 0x1.ffff62p+99)":
+Test "jn (2, 0xf.fffb1p+96)":
double: 2
float: 2
idouble: 2
ifloat: 2
-Test "jn (2, 2.4048255576957729)":
+Test "jn (2, 0xf.fffffp+124)":
double: 2
-float: 1
+float: 2
idouble: 2
+ifloat: 2
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (3, 0x2p+0)":
+float: 1
ifloat: 1
-Test "jn (3, 0.125)":
+Test "jn (3, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 0.75)":
+Test "jn (3, 0xap+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 10.0)":
-double: 3
+Test "jn (4, 0x2.67a2a4p+0)":
float: 1
-idouble: 3
ifloat: 1
-Test "jn (3, 2.0)":
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
float: 1
ifloat: 1
-Test "jn (3, 2.4048255576957729)":
-double: 3
-idouble: 3
-Test "jn (4, 2.4048255576957729)":
+Test "jn (5, 0x2.67a2a4p+0)":
double: 1
+float: 1
idouble: 1
-Test "jn (5, 2.4048255576957729)":
-double: 3
+ifloat: 1
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
float: 1
-idouble: 3
+idouble: 2
ifloat: 1
-Test "jn (6, 2.4048255576957729)":
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
double: 4
-float: 3
idouble: 4
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
ifloat: 3
-Test "jn (7, 2.4048255576957729)":
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
double: 3
-float: 5
idouble: 3
-ifloat: 5
-Test "jn (8, 2.4048255576957729)":
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+Test "jn (9, 0x2.67a2a4p+0)":
double: 3
-float: 2
+float: 3
idouble: 3
-ifloat: 2
-Test "jn (9, 2.4048255576957729)":
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
# lgamma
-Test "lgamma (0.7)":
+Test "lgamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "lgamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "lgamma (1.2)":
+Test "lgamma (-0x4p-12)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "lgamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "lgamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "lgamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# log
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
# log10
-Test "log10 (0.75)":
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+Test "log10 (0xcp-4)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "log10 (e)":
-float: 1
-ifloat: 1
# log1p
-Test "log1p (-0.25)":
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e15p+0)":
float: 1
ifloat: 1
# pow
-Test "pow (0x0.ffffffp0, -0x1p24)":
+Test "pow (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
-Test "pow (0x0.ffffffp0, 0x1p24)":
+Test "pow (0xf.fffffp-4, -0x1p+24)":
float: 1
ifloat: 1
-Test "pow (0x1.000002p0, 0x1p24)":
+Test "pow (0xf.fffffp-4, 0x1p+24)":
float: 1
ifloat: 1
# pow10
-Test "pow10 (-1)":
+Test "pow10 (-0x1.31p+8)":
double: 1
idouble: 1
-Test "pow10 (-305)":
+Test "pow10 (-0x1p+0)":
double: 1
idouble: 1
-Test "pow10 (-36)":
+Test "pow10 (-0x2.4p+4)":
double: 1
idouble: 1
-Test "pow10 (3)":
+Test "pow10 (0x2.4p+4)":
double: 1
idouble: 1
-Test "pow10 (36)":
+Test "pow10 (0x3p+0)":
double: 1
idouble: 1
+# pow_tonearest
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# sin
+Test "sin (0x1p+0)":
+float: 1
+ifloat: 1
+
# sin_tonearest
-Test "sin_tonearest (1)":
+Test "sin_tonearest (0x1p+0)":
float: 1
ifloat: 1
# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
+float: 1
+ifloat: 1
Test "sincos (0x1p+120) extra output 2":
float: 1
ifloat: 1
-Test "sincos (0x1p+127) extra output 2":
+Test "sincos (0x8.60a92p-4) extra output 2":
float: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 1":
-double: 1
+Test "sincos (0x8p+124) extra output 2":
float: 1
-idouble: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
-double: 1
-idouble: 1
-Test "sincos (pi/6) extra output 2":
+Test "sincos (0xc.d4967p-4) extra output 2":
float: 1
ifloat: 1
# tgamma
-Test "tgamma (-0.5)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (-0x0.fffffffffffff8p0)":
-double: 1
-idouble: 1
-Test "tgamma (-0x0.ffffffp0)":
-float: 1
-ifloat: 1
-Test "tgamma (-0x1.000002p0)":
+Test "tgamma (-0x1.000002p+0)":
double: 2
idouble: 2
-Test "tgamma (-0x1.0a32a2p+5)":
-float: 2
-ifloat: 2
-Test "tgamma (-0x13.ffffep0)":
+Test "tgamma (-0x1.3ffffep+4)":
float: 2
ifloat: 2
-Test "tgamma (-0x14.000000000001p0)":
+Test "tgamma (-0x1.4000000000001p+4)":
double: 1
idouble: 1
-Test "tgamma (-0x14.00002p0)":
+Test "tgamma (-0x1.400002p+4)":
float: 1
ifloat: 1
-Test "tgamma (-0x1d.ffffep0)":
+Test "tgamma (-0x1.dffffep+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x1e.000000000001p0)":
+Test "tgamma (-0x1.e000000000001p+4)":
double: 3
idouble: 3
-Test "tgamma (-0x1e.00002p0)":
+Test "tgamma (-0x1.e00002p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x2.0000000000002p0)":
+Test "tgamma (-0x2.0000000000002p+0)":
double: 1
idouble: 1
-Test "tgamma (-0x2.000004p0)":
+Test "tgamma (-0x2.000004p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (-0x2.fffffcp0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (-0x27.fffffffffffep0)":
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
double: 1
idouble: 1
-Test "tgamma (-0x28.000000000002p0)":
+Test "tgamma (-0x2.8000000000002p+4)":
double: 1
idouble: 1
-Test "tgamma (-0x28.00004p0)":
+Test "tgamma (-0x2.800004p+4)":
double: 2
idouble: 2
-Test "tgamma (-0x29.00004p0)":
+Test "tgamma (-0x2.8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (-0x2.900004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.9ffffcp+4)":
double: 1
idouble: 1
-Test "tgamma (-0x29.ffffcp0)":
+Test "tgamma (-0x2.fffffcp+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x3.000004p0)":
+ifloat: 1
+Test "tgamma (-0x3.000004p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (-0x3.fffffcp0)":
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x3.1fffffffffffep+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x3.8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x3.ffffffffffffep0)":
+Test "tgamma (-0x3.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.ffffffffffffep+0)":
double: 2
idouble: 2
-Test "tgamma (-0x31.fffffffffffep0)":
-double: 3
-idouble: 3
-Test "tgamma (-0x4.000008p0)":
+Test "tgamma (-0x4.000008p+0)":
float: 1
ifloat: 1
-Test "tgamma (-0x4.fffff8p0)":
+Test "tgamma (-0x4.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x4.ffffffffffffcp0)":
+ifloat: 1
+Test "tgamma (-0x4.fffff8p+0)":
double: 1
idouble: 1
-Test "tgamma (-0x5.000008p0)":
+Test "tgamma (-0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x5.ffffffffffffcp0)":
+Test "tgamma (-0x5.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.ffffffffffffcp+0)":
double: 1
idouble: 1
-Test "tgamma (-0x6.000008p0)":
+Test "tgamma (-0x6.000008p+0)":
float: 2
ifloat: 2
-Test "tgamma (-0x6.fffff8p0)":
+Test "tgamma (-0x6.3fffffffffffcp+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.fffff8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (-0x6.ffffffffffffcp0)":
+Test "tgamma (-0x6.ffffffffffffcp+0)":
double: 4
idouble: 4
-Test "tgamma (-0x63.fffffffffffcp0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x64.000000000004p0)":
-double: 1
-idouble: 1
-Test "tgamma (-0x7.0000000000004p0)":
+Test "tgamma (-0x7.0000000000004p+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.000008p0)":
+Test "tgamma (-0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x7.fffff8p0)":
+Test "tgamma (-0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x7.fffff8p+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "tgamma (-0x7.ffffffffffffcp0)":
+Test "tgamma (-0x7.ffffffffffffcp+0)":
double: 3
idouble: 3
-Test "tgamma (-0x8.00001p0)":
+Test "tgamma (-0x8.00001p+0)":
double: 2
idouble: 2
-Test "tgamma (-0x9.ffffffffffff8p0)":
+Test "tgamma (-0x8.8p+0)":
double: 1
-idouble: 1
-Test "tgamma (-0x9.fffffp0)":
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (-0x96.000000000008p0)":
+Test "tgamma (-0x8p-4)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0xa.00001p0)":
+ifloat: 1
+Test "tgamma (-0x9.6000000000008p+4)":
double: 1
idouble: 1
-Test "tgamma (-2.5)":
+Test "tgamma (-0x9.60001p+4)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-Test "tgamma (-3.5)":
+Test "tgamma (-0x9.8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-4.5)":
+Test "tgamma (-0x9.ffffffffffff8p+0)":
double: 1
-float: 1
idouble: 1
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
ifloat: 1
-Test "tgamma (-5.5)":
+Test "tgamma (-0xa.00001p+0)":
double: 1
idouble: 1
-Test "tgamma (-6.5)":
-float: 1
-ifloat: 1
-Test "tgamma (-7.5)":
-double: 2
+Test "tgamma (-0xa.c0001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.fffffp-4)":
float: 1
-idouble: 2
ifloat: 1
-Test "tgamma (-8.5)":
+Test "tgamma (0x1.28p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-9.5)":
+Test "tgamma (0x1.38p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0x1.78p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0.5)":
-float: 1
-ifloat: 1
-Test "tgamma (0.7)":
+Test "tgamma (0x1.d8p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x1.fffffep0)":
+Test "tgamma (0x1.e8p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffep+0)":
float: 1
ifloat: 1
-Test "tgamma (0x1.fffffffffffffp0)":
+Test "tgamma (0x1.fffffffffffffp+0)":
double: 1
idouble: 1
Test "tgamma (0x1p-24)":
float: 1
ifloat: 1
-Test "tgamma (0x1p-53)":
+Test "tgamma (0x2.18p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.28p+4)":
double: 1
+float: 2
idouble: 1
+ifloat: 2
Test "tgamma (0x2.30a43cp+4)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "tgamma (0x2.fffffcp0)":
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
float: 3
ifloat: 3
-Test "tgamma (0x3.fffffcp0)":
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x3.fffffcp+0)":
float: 1
ifloat: 1
-Test "tgamma (0x3.ffffffffffffep0)":
+Test "tgamma (0x3.ffffffffffffep+0)":
double: 1
idouble: 1
-Test "tgamma (0x4.0000000000004p0)":
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x4.ffffffffffffcp0)":
+Test "tgamma (0x4.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (0x5.0000000000004p0)":
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
double: 1
idouble: 1
-Test "tgamma (0x5.000008p0)":
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x5.000008p+0)":
float: 2
ifloat: 2
-Test "tgamma (0x5.fffff8p0)":
+Test "tgamma (0x5.fffff8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x6.0000000000004p0)":
+Test "tgamma (0x6.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x6.000008p0)":
+Test "tgamma (0x6.000008p+0)":
float: 2
ifloat: 2
-Test "tgamma (0x6.fffff8p0)":
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.fffff8p+0)":
double: 1
idouble: 1
-Test "tgamma (0x6.ffffffffffffcp0)":
+Test "tgamma (0x6.ffffffffffffcp+0)":
double: 4
idouble: 4
-Test "tgamma (0x7.0000000000004p0)":
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000004p+0)":
double: 4
idouble: 4
-Test "tgamma (0x7.000008p0)":
+Test "tgamma (0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x7.fffff8p0)":
+Test "tgamma (0x7.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (0x7.ffffffffffffcp0)":
+Test "tgamma (0x7.fffff8p+0)":
double: 2
+float: 1
idouble: 2
-Test "tgamma (0x8.00001p0)":
+ifloat: 1
+Test "tgamma (0x7.ffffffffffffcp+0)":
double: 2
idouble: 2
-Test "tgamma (0xa.b9fd72b0fb238p+4)":
+Test "tgamma (0x7p+0)":
double: 1
idouble: 1
-Test "tgamma (10)":
+Test "tgamma (0x8.00001p+0)":
+double: 2
+idouble: 2
+Test "tgamma (0x8.8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (18.5)":
+Test "tgamma (0x8p+0)":
double: 1
-float: 1
idouble: 1
+Test "tgamma (0x8p-4)":
+float: 1
ifloat: 1
-Test "tgamma (19.5)":
-double: 2
-idouble: 2
-Test "tgamma (2.5)":
-float: 2
-ifloat: 2
-Test "tgamma (23.5)":
+Test "tgamma (0x8p-56)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (29.5)":
+Test "tgamma (0x9.8p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (3)":
-float: 1
-ifloat: 1
-Test "tgamma (3.5)":
-float: 2
-ifloat: 2
-Test "tgamma (30.5)":
-float: 1
-ifloat: 1
-Test "tgamma (33.5)":
-float: 1
-ifloat: 1
-Test "tgamma (34.5)":
+Test "tgamma (0x9p+0)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
-Test "tgamma (4)":
-float: 1
-ifloat: 1
-Test "tgamma (4.5)":
+Test "tgamma (0xa.b9fd72b0fb238p+4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (6)":
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (6.5)":
+
+# y0
+Test "y0 (0x1.8p+0)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-Test "tgamma (7)":
+Test "y0 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
-Test "tgamma (7.5)":
+Test "y0 (0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (8)":
-double: 1
-idouble: 1
-Test "tgamma (8.5)":
-double: 1
+Test "y0 (0x1p-20)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (9)":
-double: 1
-idouble: 1
-Test "tgamma (9.5)":
+Test "y0 (0x1p-40)":
double: 1
+float: 1
idouble: 1
-
-# y0
-Test "y0 (0x1.3ffp+74)":
+ifloat: 1
+Test "y0 (0x1p-80)":
double: 1
+float: 1
idouble: 1
-Test "y0 (0x1.ff00000000002p+840)":
+ifloat: 1
+Test "y0 (0x4.ffcp+72)":
double: 1
idouble: 1
-Test "y0 (0x1p-10)":
+Test "y0 (0x4p-112)":
double: 1
idouble: 1
-Test "y0 (0x1p-110)":
+Test "y0 (0x4p-12)":
double: 1
idouble: 1
-Test "y0 (0x1p-20)":
+Test "y0 (0x4p-32)":
float: 1
ifloat: 1
-Test "y0 (0x1p-30)":
+Test "y0 (0x4p-52)":
float: 1
ifloat: 1
-Test "y0 (0x1p-40)":
+Test "y0 (0x4p-72)":
+double: 1
+idouble: 1
+Test "y0 (0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (0x1p-50)":
+Test "y0 (0xap+0)":
float: 1
ifloat: 1
-Test "y0 (0x1p-70)":
+Test "y0 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "y0 (0x1p-80)":
+Test "y0 (0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (1.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0)":
+
+# y1
+Test "y1 (0x1.8p+0)":
float: 1
ifloat: 1
-Test "y0 (8.0)":
+Test "y1 (0x2p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-
-# y1
-Test "y1 (0.125)":
+Test "y1 (0x2p-4)":
double: 1
idouble: 1
-Test "y1 (0x1.27e204p+99)":
+Test "y1 (0x4p-12)":
double: 1
idouble: 1
-Test "y1 (0x1p-10)":
+Test "y1 (0x8p+0)":
double: 1
+float: 2
idouble: 1
-Test "y1 (1.5)":
-float: 1
-ifloat: 1
-Test "y1 (10.0)":
+ifloat: 2
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
+Test "y1 (0xap+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "y1 (2.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y1 (8.0)":
-double: 1
+Test "y1 (0xf.fffffp+124)":
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
# yn
-Test "yn (0, 1.0)":
+Test "yn (-10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (0, 0x1.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 1.5)":
+Test "yn (0, 0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 10.0)":
-float: 1
-ifloat: 1
-Test "yn (0, 8.0)":
+Test "yn (0, 0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (1, 0.125)":
-double: 1
-idouble: 1
-Test "yn (1, 1.5)":
+Test "yn (0, 0xap+0)":
float: 1
ifloat: 1
-Test "yn (1, 10.0)":
-double: 3
+Test "yn (1, 0x1.8p+0)":
float: 1
-idouble: 3
ifloat: 1
-Test "yn (1, 2.0)":
+Test "yn (1, 0x2p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (1, 8.0)":
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (1, 0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "yn (10, 0.125)":
+Test "yn (10, 0x2p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (10, 0x2p-4)":
double: 1
idouble: 1
-Test "yn (10, 0.75)":
+Test "yn (10, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (10, 1.0)":
+Test "yn (10, 0xcp-4)":
double: 1
+float: 1
idouble: 1
-Test "yn (10, 10.0)":
+ifloat: 1
+Test "yn (2, 0x8p+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (10, 2.0)":
-double: 2
-idouble: 2
-Test "yn (3, 0.125)":
+Test "yn (2, 0xf.fffb1p+96)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "yn (3, 0.75)":
+Test "yn (2, 0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (3, 10.0)":
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "yn (3, 2.0)":
+Test "yn (3, 0xcp-4)":
double: 1
idouble: 1
# Maximal error of functions:
+Function: "acosh":
+double: 1
+idouble: 1
+
+Function: "asinh":
+double: 1
+float: 1
+ifloat: 1
+
Function: "atan2":
float: 1
ifloat: 1
@@ -4179,7 +5163,9 @@ ifloat: 1
Function: "cbrt":
double: 1
+float: 1
idouble: 1
+ifloat: 1
Function: Real part of "ccos":
double: 1
@@ -4240,15 +5226,25 @@ idouble: 1
ifloat: 1
Function: "cos":
-double: 2
float: 1
-idouble: 2
ifloat: 1
Function: "cos_tonearest":
float: 1
ifloat: 1
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
Function: Real part of "cpow":
double: 2
float: 4
@@ -4294,36 +5290,46 @@ idouble: 1
ifloat: 1
Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
Function: Imaginary part of "ctan_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Real part of "ctanh":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
Function: Imaginary part of "ctanh":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
Function: Real part of "ctanh_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
Function: "erf":
double: 1
@@ -4339,22 +5345,32 @@ Function: "exp10":
double: 1
idouble: 1
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+
Function: "expm1":
double: 1
float: 1
idouble: 1
ifloat: 1
-Function: "gamma":
+Function: "expm1_tonearest":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
-Function: "hypot":
+Function: "gamma":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Function: "hypot":
+double: 1
+idouble: 1
+
Function: "j0":
double: 2
float: 2
@@ -4369,15 +5385,19 @@ ifloat: 2
Function: "jn":
double: 4
-float: 5
+float: 4
idouble: 4
-ifloat: 5
+ifloat: 4
Function: "lgamma":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+
+Function: "log":
+float: 1
+ifloat: 1
Function: "log10":
double: 1
@@ -4397,20 +5417,22 @@ Function: "pow10":
double: 1
idouble: 1
+Function: "pow_tonearest":
+float: 1
+ifloat: 1
+
+Function: "sin":
+float: 1
+ifloat: 1
+
Function: "sin_tonearest":
float: 1
ifloat: 1
Function: "sincos":
-double: 1
float: 1
-idouble: 1
ifloat: 1
-Function: "tan":
-double: 1
-idouble: 1
-
Function: "tgamma":
double: 4
float: 3
diff --git a/libc/ports/sysdeps/unix/sysv/linux/arm/clone.S b/libc/ports/sysdeps/unix/sysv/linux/arm/clone.S
index 44286a5cd..03fe9ab72 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/arm/clone.S
+++ b/libc/ports/sysdeps/unix/sysv/linux/arm/clone.S
@@ -88,14 +88,8 @@ PSEUDO_END (__clone)
#endif
@ pick the function arg and call address off the stack and execute
ldr r0, [sp, #4]
-#if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
ldr ip, [sp], #8
- mov lr, pc
- bx ip
-#else
- ldr lr, [sp], #8
- blx lr
-#endif
+ BLX (ip)
@ and we are done, passing the return value through r0
b PLTJMP(HIDDEN_JUMPTARGET(_exit))
diff --git a/libc/ports/sysdeps/unix/sysv/linux/ia64/setjmp.S b/libc/ports/sysdeps/unix/sysv/linux/ia64/setjmp.S
index 94b18c368..c93fba5d5 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/ia64/setjmp.S
+++ b/libc/ports/sysdeps/unix/sysv/linux/ia64/setjmp.S
@@ -20,48 +20,48 @@
jmp_buf!
- offset: description:
+ offset: description:
------- ------------
- 0x000 stack pointer (r12) ; unchangeable (see _JMPBUF_UNWINDS)
- 0x008 r1 (gp)
+ 0x000 stack pointer (r12) ; unchangeable (see _JMPBUF_UNWINDS)
+ 0x008 r1 (gp)
0x010 caller's unat
0x018 fpsr ; disabled per the C standard; BZ 16379
- 0x020 r4
- 0x028 r5
- 0x030 r6
- 0x038 r7
- 0x040 rp (b0)
- 0x048 b1
- 0x050 b2
- 0x058 b3
- 0x060 b4
- 0x068 b5
- 0x070 ar.pfs
- 0x078 ar.lc
- 0x080 pr
- 0x088 ar.bsp ; unchangeable (see __longjmp.S)
- 0x090 ar.unat
+ 0x020 r4
+ 0x028 r5
+ 0x030 r6
+ 0x038 r7
+ 0x040 rp (b0)
+ 0x048 b1
+ 0x050 b2
+ 0x058 b3
+ 0x060 b4
+ 0x068 b5
+ 0x070 ar.pfs
+ 0x078 ar.lc
+ 0x080 pr
+ 0x088 ar.bsp ; unchangeable (see __longjmp.S)
+ 0x090 ar.unat
0x098 &__jmp_buf ; address of the jmpbuf (needed to locate NaT bits in unat)
0x0a0 f2
0x0b0 f3
0x0c0 f4
0x0d0 f5
0x0e0 f16
- 0x0f0 f17
- 0x100 f18
- 0x110 f19
- 0x120 f20
- 0x130 f21
- 0x130 f22
- 0x140 f23
- 0x150 f24
- 0x160 f25
- 0x170 f26
- 0x180 f27
- 0x190 f28
- 0x1a0 f29
- 0x1b0 f30
- 0x1c0 f31 */
+ 0x0f0 f17
+ 0x100 f18
+ 0x110 f19
+ 0x120 f20
+ 0x130 f21
+ 0x130 f22
+ 0x140 f23
+ 0x150 f24
+ 0x160 f25
+ 0x170 f26
+ 0x180 f27
+ 0x190 f28
+ 0x1a0 f29
+ 0x1b0 f30
+ 0x1c0 f31 */
#include <sysdep.h>
#include <features.h>
diff --git a/libc/shlib-versions b/libc/shlib-versions
index 51f532734..78b0ad74f 100644
--- a/libc/shlib-versions
+++ b/libc/shlib-versions
@@ -23,7 +23,7 @@
s390x-.*-linux.* DEFAULT GLIBC_2.2
powerpc64-.*-linux.* DEFAULT GLIBC_2.3
-powerpc.*le-.*-linux.* DEFAULT GLIBC_2.18
+powerpc.*le-.*-linux.* DEFAULT GLIBC_2.17
.*-.*-gnu-gnu.* DEFAULT GLIBC_2.2.6
# Configuration ABI Identifier for ABI data files
diff --git a/libc/sysdeps/generic/ldsodefs.h b/libc/sysdeps/generic/ldsodefs.h
index cb2feb39f..ea3b6d3af 100644
--- a/libc/sysdeps/generic/ldsodefs.h
+++ b/libc/sysdeps/generic/ldsodefs.h
@@ -234,11 +234,6 @@ extern int _dl_name_match_p (const char *__name, const struct link_map *__map)
extern unsigned long int _dl_higher_prime_number (unsigned long int n)
internal_function;
-/* Mask every signal, returning the previous sigmask in OLD. */
-extern void _dl_mask_all_signals (sigset_t *old) internal_function;
-/* Undo _dl_mask_all_signals. */
-extern void _dl_unmask_signals (sigset_t *old) internal_function;
-
/* Function used as argument for `_dl_receive_error' function. The
arguments are the error code, error string, and the objname the
error occurred in. */
@@ -997,17 +992,6 @@ extern void *_dl_allocate_tls_storage (void)
extern void *_dl_allocate_tls_init (void *) internal_function;
rtld_hidden_proto (_dl_allocate_tls_init)
-/* Remove all allocated dynamic TLS regions from a DTV
- for reuse by new thread. */
-extern void _dl_clear_dtv (dtv_t *dtv) internal_function;
-rtld_hidden_proto (_dl_clear_dtv)
-
-extern void *__signal_safe_memalign (size_t boundary, size_t size);
-extern void *__signal_safe_malloc (size_t size);
-extern void __signal_safe_free (void *ptr);
-extern void *__signal_safe_realloc (void *ptr, size_t size);
-extern void *__signal_safe_calloc (size_t nmemb, size_t size);
-
/* Deallocate memory allocated with _dl_allocate_tls. */
extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function;
rtld_hidden_proto (_dl_deallocate_tls)
diff --git a/libc/sysdeps/mach/hurd/dl-sysdep.h b/libc/sysdeps/mach/hurd/dl-sysdep.h
index e7e209625..0b3158e57 100644
--- a/libc/sysdeps/mach/hurd/dl-sysdep.h
+++ b/libc/sysdeps/mach/hurd/dl-sysdep.h
@@ -29,10 +29,3 @@
# define DL_ARGV_NOT_RELRO 1
# define LIBC_STACK_END_NOT_RELRO 1
#endif
-
-#include <signal.h>
-inline void _dl_mask_all_signals (sigset_t *) internal_function;
-inline void _dl_mask_all_signals (sigset_t *) { }
-
-inline void _dl_unmask_all_signals (sigset_t *) internal_function;
-inline void _dl_unmask_all_signals (sigset_t *) { }
diff --git a/libc/sysdeps/powerpc/Makefile b/libc/sysdeps/powerpc/Makefile
index f75e62523..b11edd77b 100644
--- a/libc/sysdeps/powerpc/Makefile
+++ b/libc/sysdeps/powerpc/Makefile
@@ -27,3 +27,7 @@ ifeq ($(subdir),misc)
sysdep_headers += sys/platform/ppc.h
tests += test-gettimebase
endif
+
+ifneq (,$(filter %le,$(config-machine)))
+abilist-pattern = %-le.abilist
+endif
diff --git a/libc/sysdeps/sh/sh4/fpu/fpu_control.h b/libc/sysdeps/sh/fpu_control.h
index ab1e97b17..5d2604baf 100644
--- a/libc/sysdeps/sh/sh4/fpu/fpu_control.h
+++ b/libc/sysdeps/sh/fpu_control.h
@@ -19,6 +19,17 @@
#ifndef _FPU_CONTROL_H
#define _FPU_CONTROL_H
+#if !defined(__SH_FPU_ANY__)
+
+#define _FPU_RESERVED 0xffffffff
+#define _FPU_DEFAULT 0x00000000
+typedef unsigned int fpu_control_t;
+#define _FPU_GETCW(cw) (cw) = 0
+#define _FPU_SETCW(cw) (void) (cw)
+extern fpu_control_t __fpu_control;
+
+#else
+
#include <features.h>
/* masking of interrupts */
@@ -59,4 +70,7 @@ extern void __set_fpscr (unsigned long);
extern fpu_control_t __fpu_control;
__END_DECLS
+
+#endif /* __SH_FPU_ANY__ */
+
#endif /* _FPU_CONTROL_H */
diff --git a/libc/sysdeps/sh/libm-test-ulps b/libc/sysdeps/sh/libm-test-ulps
new file mode 100644
index 000000000..8fc221b3f
--- /dev/null
+++ b/libc/sysdeps/sh/libm-test-ulps
@@ -0,0 +1,6193 @@
+# Begin of automatic generation
+
+# acos_towardzero
+Test "acos_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+
+# asin_towardzero
+Test "asin_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "asin_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "asin_towardzero (-0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_towardzero (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "asin_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+Test "asin_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
+Test "asin_towardzero (0x8p-4)":
+float: 1
+ifloat: 1
+
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xap+0)":
+float: 1
+ifloat: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
+
+# atan2
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
+float: 1
+ifloat: 1
+Test "atan2 (0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
+
+# atanh
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
+Test "atanh (0xcp-4)":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.25 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0.25 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-100 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-100 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 + 1.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-129 - 1.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1.fp-30 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1.fp-30 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-105 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-112 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-52 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-1.0 + 0x1p50 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-1.0 - 0x1p50 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-2 - 3 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0.5 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 + 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacos (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (1.0 - 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+
+# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0.25 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0.25 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-100 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-100 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 + 1.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x0.ffffffp0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-30 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1.fp-30 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-105 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-112 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-52 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-2 - 3 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0.5 + +0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0.5 - 0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 0x1p-63 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cacosh (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cacosh (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)":
+float: 2
+ifloat: 2
+
+# casin
+Test "Imaginary part of: casin (+0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-0x1p-23 + 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1p-23 + 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casin (-0x1p-23 - 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-0x1p-23 - 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (-1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.25 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.25 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-105 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-112 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0.5 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0.75 + 1.25 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-10 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-10 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1p-105 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-105 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-112 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-112 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (0x1p-23 + 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 + 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1p-23 + 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casin (0x1p-23 - 0.5 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 - 0x0.ffffffp0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (0x1p-23 - 0x1.000002p0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-52 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-52 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-63 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1p-63 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (1.0 + 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 + 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casin (1.0 - 0.25 i)":
+double: 1
+idouble: 1
+Test "Real part of: casin (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 - 0.5 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+
+# casinh
+Test "Imaginary part of: casinh (-0.25 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-0.25 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0.5 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x0.ffffffp0 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x0.ffffffp0 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-105 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-105 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-112 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-112 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1p-23 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.5 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0.25 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0.25 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0.5 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1.fp-129 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-105 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-112 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-52 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0x1p-63 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.5 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.75 + 1.25 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x0.ffffffp0 + 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x0.ffffffp0 - 0x1p-23 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-10 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-10 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp-129 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp-129 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-105 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-105 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-112 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-112 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1p-23 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 + 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0.25 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-10 i)":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-100 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-129 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0x1.fp-30 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 + 0x1.fp-129 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0x1.fp-129 i)":
+double: 1
+idouble: 1
+
+# catan
+Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 - 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1.000002p0 - 0x1p-13 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1p-1020 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (-0x1p-1020 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-54 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-57 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-0x1p-57 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (-1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (-2 - 3 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 - 0x1p-126 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1.000002p0 - 0x1p-13 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1p-1020 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catan (0x1p-1020 - 1.0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-54 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-54 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-57 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catan (0x1p-57 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catan (1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+
+# catanh
+Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 + 0x1.000002p0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-13 - 0x1.000002p0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (-0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (-1.0 + 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 + 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 + 0x1p-57 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-57 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (-2 - 3 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1.000002p0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1.fp1023 + 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp1023 - 0x1.fp1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp127 + 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1.fp127 - 0x1.fp127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 0x1.000002p0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: catanh (0x1p-13 - 1.0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (0x1p-27 + 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)":
+double: 1
+idouble: 1
+Test "Real part of: catanh (1.0 + 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 + 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 + 0x1p-57 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-54 i)":
+float: 1
+ifloat: 1
+Test "Real part of: catanh (1.0 - 0x1p-57 i)":
+float: 1
+ifloat: 1
+
+# cbrt
+Test "cbrt (-0x1.bp+4)":
+double: 1
+idouble: 1
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+Test "cbrt (0xcp-4)":
+double: 1
+idouble: 1
+Test "cbrt (0xf.ep-4)":
+double: 1
+idouble: 1
+
+# ccos
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+
+# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-2 - 3 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + inf i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-inf - 0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1073 + 0x1p-1073 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1p-1074 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (3 + inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# cos
+Test "cos (0x1p+120)":
+float: 1
+ifloat: 1
+Test "cos (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+
+# cos_tonearest
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x7p+0)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+
+# cos_towardzero
+Test "cos_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_towardzero (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.182a48p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1024)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1076)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_towardzero (0x8p-972)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
+
+# cosh
+Test "cosh (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
+float: 1
+ifloat: 1
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x5.96a7ep+4)":
+float: 1
+ifloat: 1
+Test "cosh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x5.96a7ep+4)":
+float: 1
+ifloat: 1
+
+# cpow
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+
+# csin
+Test "Real part of: csin (-0.75 + 710.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 + 89.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csin (-0.75 - 710.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 - 89.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 + 710.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 + 89.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 - 710.5 i)":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 - 89.5 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0x1p-1074 + 1440 i)":
+double: 1
+idouble: 1
+
+# csinh
+Test "Imaginary part of: csinh (-2 - 3 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 + 0.75 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 - 0.75 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-89.5 + 0.75 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (-89.5 - 0.75 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csinh (0.75 + 1.25 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 + 0.75 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 - 0.75 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (89.5 + 0.75 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (89.5 - 0.75 i)":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+
+# ctan
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# ctan_tonearest
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# ctan_towardzero
+Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+Test "Imaginary part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+double: 5
+idouble: 5
+Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+
+# ctanh
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
+
+# ctanh_towardzero
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+double: 5
+idouble: 5
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# erf
+Test "erf (0x1.4p+0)":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (-0x8p-4)":
+float: 1
+ifloat: 1
+Test "erfc (0x2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x7.fe8008p+0)":
+float: 1
+ifloat: 1
+Test "erfc (0x7.fffd6p+0)":
+float: 1
+ifloat: 1
+
+# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_towardzero
+Test "exp10_towardzero (0x2.4p+4)":
+double: 1
+idouble: 1
+
+# exp_towardzero
+Test "exp_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1 (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_towardzero
+Test "expm1_towardzero (-0x1p-100)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (-0x1p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x1p-64)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (-0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_towardzero (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# fma_towardzero
+Test "fma_towardzero (-0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, -0x1p-1074)":
+double: 1
+idouble: 1
+Test "fma_towardzero (-0x1p-1074, 0x1.1p-1, -0x0.fffffffffffffp-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1.ffffffffffffcp-1022, 0x1.0000000000001p-1, 0x1p-1074)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, -0x1p-1074, 0x0.fffffffffffffp-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, -0x1p-1074, 0x1p-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, -0x1p-1074, 0x1p-1074)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, -0x1p-1074, 0x1p1023)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, 0x1.1p-1, 0x0.fffffffffffffp-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, 0x1p-1074, -0x0.fffffffffffffp-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, 0x1p-1074, -0x1p-1022)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, 0x1p-1074, -0x1p-1074)":
+double: 1
+idouble: 1
+Test "fma_towardzero (0x1p-1074, 0x1p-1074, -0x1p1023)":
+double: 1
+idouble: 1
+
+# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x2p-16)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "gamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+
+# j0
+Test "j0 (-0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "j0 (0x2p+0)":
+float: 2
+ifloat: 2
+Test "j0 (0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0x8p+0)":
+float: 1
+ifloat: 1
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# j1
+Test "j1 (0x1.ff00000000002p+840)":
+double: 1
+idouble: 1
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "j1 (0x8p+0)":
+double: 1
+idouble: 1
+Test "j1 (0xap+0)":
+float: 2
+ifloat: 2
+Test "j1 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "j1 (0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# jn
+Test "jn (0, -0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0x2p+0)":
+float: 2
+ifloat: 2
+Test "jn (0, 0x4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0x8p+0)":
+float: 1
+ifloat: 1
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x2p+0)":
+double: 1
+idouble: 1
+Test "jn (1, 0x8p+0)":
+double: 1
+idouble: 1
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+Test "jn (10, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (2, 0x8p+124)":
+double: 1
+idouble: 1
+Test "jn (2, 0xf.fffb1p+96)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0x2.67a2a8p+0)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+Test "jn (3, 0x2p+0)":
+float: 1
+ifloat: 1
+Test "jn (3, 0x2p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0xap+0)":
+double: 3
+idouble: 3
+Test "jn (3, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (4, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
+float: 1
+ifloat: 1
+Test "jn (5, 0x2.67a2a4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
+double: 4
+idouble: 4
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+Test "jn (9, 0x2.67a2a4p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+
+# lgamma
+Test "lgamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "lgamma (-0x2p-16)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "lgamma (-0x8p-8)":
+double: 1
+idouble: 1
+Test "lgamma (0x4p-12)":
+float: 1
+ifloat: 1
+Test "lgamma (0x4p-32)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# log
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
+
+# log10
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+Test "log10 (0xcp-4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# log1p
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e15p+0)":
+float: 1
+ifloat: 1
+
+# pow
+Test "pow (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# pow10
+Test "pow10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "pow10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "pow10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+Test "pow10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "pow10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# pow_tonearest
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.5, 1.03125)":
+float: 1
+ifloat: 1
+
+# sin
+Test "sin (0x1p+0)":
+float: 1
+ifloat: 1
+
+# sin_tonearest
+Test "sin_tonearest (0x1p+0)":
+float: 1
+ifloat: 1
+
+# sin_towardzero
+Test "sin_towardzero (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1p+0)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.1e19ep+72)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x2.553534p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x3.be735cp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x3.ec2a04p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_towardzero (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237e8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237ep+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x9p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xe.ef3afp-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+
+# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
+float: 1
+ifloat: 1
+Test "sincos (0x1p+120) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0x8.60a92p-4) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0x8p+124) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0xc.d4967p-4) extra output 2":
+float: 1
+ifloat: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "sinh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (-0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x7p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
+
+# tgamma
+Test "tgamma (-0x1.000002p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x1.3ffffep+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x1.4000000000001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x1.400002p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x1.dffffep+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x1.e000000000001p+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x1.e00002p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x2.0000000000002p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.8000000000002p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.800004p+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x2.8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (-0x2.900004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.9ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x2.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x3.1fffffffffffep+4)":
+double: 3
+idouble: 3
+Test "tgamma (-0x3.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.ffffffffffffep+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x4.000008p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x4.fffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x5.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x5.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (-0x6.3fffffffffffcp+4)":
+double: 2
+idouble: 2
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0x6.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (-0x7.0000000000004p+0)":
+double: 3
+idouble: 3
+Test "tgamma (-0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x7.fffff8p+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "tgamma (-0x7.ffffffffffffcp+0)":
+double: 3
+idouble: 3
+Test "tgamma (-0x8.00001p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x9.6000000000008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.60001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x9.ffffffffffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0xa.00001p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0xa.c0001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+Test "tgamma (-0xf.fffffp-4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.28p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.38p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0x1.78p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.d8p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x1.e8p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffep+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x1.fffffffffffffp+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x1p-24)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.18p+4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.28p+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (0x2.30a43cp+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
+float: 3
+ifloat: 3
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x3.fffffcp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x3.ffffffffffffep+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x5.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x5.fffff8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x6.0000000000004p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x6.000008p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.fffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000004p+0)":
+double: 4
+idouble: 4
+Test "tgamma (0x7.000008p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.ffffffffffffcp+0)":
+double: 2
+idouble: 2
+Test "tgamma (0x7p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8.00001p+0)":
+double: 2
+idouble: 2
+Test "tgamma (0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8p-4)":
+float: 1
+ifloat: 1
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x9p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0xa.b9fd72b0fb238p+4)":
+double: 1
+idouble: 1
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y0
+Test "y0 (0x1.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (0x1.ff00000000002p+840)":
+double: 1
+idouble: 1
+Test "y0 (0x1p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (0x1p-20)":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-40)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x1p-80)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x4.ffcp+72)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-112)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y0 (0x4p-32)":
+float: 1
+ifloat: 1
+Test "y0 (0x4p-52)":
+float: 1
+ifloat: 1
+Test "y0 (0x4p-72)":
+double: 1
+idouble: 1
+Test "y0 (0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0xap+0)":
+float: 1
+ifloat: 1
+Test "y0 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "y0 (0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "y1 (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (0x2p-4)":
+double: 1
+idouble: 1
+Test "y1 (0x4p-12)":
+double: 1
+idouble: 1
+Test "y1 (0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
+Test "y1 (0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# yn
+Test "yn (-10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (0, 0x1.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x1p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 0x8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (0, 0xap+0)":
+float: 1
+ifloat: 1
+Test "yn (1, 0x1.8p+0)":
+float: 1
+ifloat: 1
+Test "yn (1, 0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (1, 0xap+0)":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (10, 0x1p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0x2p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (10, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (10, 0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (2, 0x8p+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (2, 0xf.fffb1p+96)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "yn (2, 0xf.fffffp+124)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 0xcp-4)":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "acos_towardzero":
+float: 1
+ifloat: 1
+
+Function: "acosh":
+double: 1
+idouble: 1
+
+Function: "asin_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "asinh":
+double: 1
+float: 1
+ifloat: 1
+
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Imaginary part of "cacos":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "cacosh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "casinh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catan":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catanh":
+float: 1
+ifloat: 1
+
+Function: "cbrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cos":
+float: 1
+ifloat: 1
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+
+Function: "cos_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cosh_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+
+Function: Imaginary part of "cpow":
+float: 2
+ifloat: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Real part of "ctan_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan_tonearest":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Real part of "ctan_towardzero":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+
+Function: Imaginary part of "ctan_towardzero":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+
+Function: Real part of "ctanh":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "ctanh":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "ctanh_tonearest":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "ctanh_tonearest":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "ctanh_towardzero":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+
+Function: Imaginary part of "ctanh_towardzero":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "exp10":
+double: 1
+idouble: 1
+
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+
+Function: "exp10_towardzero":
+double: 1
+idouble: 1
+
+Function: "exp_towardzero":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "expm1_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "expm1_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "fma_towardzero":
+double: 1
+idouble: 1
+
+Function: "gamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "hypot":
+double: 1
+idouble: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 4
+idouble: 4
+ifloat: 4
+
+Function: "lgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "log":
+float: 1
+ifloat: 1
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log1p":
+float: 1
+ifloat: 1
+
+Function: "pow":
+float: 1
+ifloat: 1
+
+Function: "pow10":
+double: 1
+idouble: 1
+
+Function: "pow_tonearest":
+float: 1
+ifloat: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+
+Function: "sin":
+float: 1
+ifloat: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+
+Function: "sin_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "sincos":
+float: 1
+ifloat: 1
+
+Function: "sinh_towardzero":
+double: 1
+idouble: 1
+
+Function: "tan_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "tgamma":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+# end of automatic generation
diff --git a/libc/sysdeps/sh/sh4/Makefile b/libc/sysdeps/sh/sh4/Makefile
new file mode 100644
index 000000000..ccac91432
--- /dev/null
+++ b/libc/sysdeps/sh/sh4/Makefile
@@ -0,0 +1,3 @@
+# Build everything with full IEEE math support. -mieee isn't
+# default for the older SH compilers.
+sysdep-CFLAGS += -mieee
diff --git a/libc/sysdeps/sh/sh4/fpu/libm-test-ulps b/libc/sysdeps/sh/sh4/fpu/libm-test-ulps
deleted file mode 100644
index d517ea9e2..000000000
--- a/libc/sysdeps/sh/sh4/fpu/libm-test-ulps
+++ /dev/null
@@ -1,1094 +0,0 @@
-# Begin of automatic generation
-
-# asin
-Test "asin (-0.5)":
-float: 2
-ifloat: 2
-Test "asin (0.5)":
-float: 2
-ifloat: 2
-Test "asin (0.7)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# atan2
-Test "atan2 (-0.7, -1.0)":
-float: 3
-ifloat: 3
-Test "atan2 (0.7, -1.0)":
-float: 3
-ifloat: 3
-Test "atan2 (1.4, -0.93)":
-float: 4
-ifloat: 4
-
-# atanh
-Test "atanh (0.7)":
-double: 1
-idouble: 1
-
-# cabs
-Test "cabs (-0.7 + 12.4 i)":
-float: 1
-ifloat: 1
-Test "cabs (-0.7 - 12.4 i)":
-float: 1
-ifloat: 1
-Test "cabs (-12.4 + 0.7 i)":
-float: 1
-ifloat: 1
-Test "cabs (-12.4 - 0.7 i)":
-float: 1
-ifloat: 1
-Test "cabs (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-Test "cabs (0.7 + 12.4 i)":
-float: 1
-ifloat: 1
-
-# cacos
-Test "Real part of: cacos (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cacos (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# cacosh
-Test "Real part of: cacosh (-2 - 3 i)":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-Test "Imaginary part of: cacosh (-2 - 3 i)":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-Test "Real part of: cacosh (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# casin
-Test "Real part of: casin (0.7 + 1.2 i)":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-Test "Imaginary part of: casin (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# casinh
-Test "Real part of: casinh (-2 - 3 i)":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-Test "Imaginary part of: casinh (-2 - 3 i)":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-Test "Real part of: casinh (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-Test "Imaginary part of: casinh (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# catan
-Test "Real part of: catan (-2 - 3 i)":
-float: 3
-ifloat: 3
-Test "Imaginary part of: catan (-2 - 3 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Real part of: catan (0.7 + 1.2 i)":
-float: 4
-ifloat: 4
-Test "Imaginary part of: catan (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-
-# catanh
-Test "Real part of: catanh (-2 - 3 i)":
-double: 4
-idouble: 4
-Test "Imaginary part of: catanh (-2 - 3 i)":
-float: 4
-ifloat: 4
-Test "Real part of: catanh (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: catanh (0.7 + 1.2 i)":
-double: 1
-float: 6
-idouble: 1
-ifloat: 6
-
-# cbrt
-Test "cbrt (-27.0)":
-double: 1
-idouble: 1
-Test "cbrt (0.970299)":
-double: 1
-idouble: 1
-
-# ccos
-Test "Imaginary part of: ccos (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Real part of: ccos (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-Test "Imaginary part of: ccos (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-
-# ccosh
-Test "Real part of: ccosh (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Real part of: ccosh (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: ccosh (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-
-# cexp
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
-float: 1
-ifloat: 1
-Test "Real part of: cexp (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: cexp (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# clog
-Test "Imaginary part of: clog (-2 - 3 i)":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-# clog10
-Test "Imaginary part of: clog10 (-0 + inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-0 - inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-2 - 3 i)":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-Test "Imaginary part of: clog10 (-3 + inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-3 - inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf + 1 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (-inf - 1 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 + inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0 - inf i)":
-float: 1
-ifloat: 1
-Test "Real part of: clog10 (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (0.7 + 1.2 i)":
-double: 1
-idouble: 1
-Test "Imaginary part of: clog10 (3 + inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (3 - inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf + inf i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: clog10 (inf - inf i)":
-float: 1
-ifloat: 1
-
-# cos
-Test "cos (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "cos (M_PI_6l * 2.0)":
-double: 1
-float: 0.5
-idouble: 1
-ifloat: 0.5
-Test "cos (M_PI_6l * 4.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "cos (pi/2)":
-double: 0.2758
-float: 0.3667
-idouble: 0.2758
-ifloat: 0.3667
-
-# cpow
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 2
-ifloat: 2
-Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i)":
-double: 1.1031
-float: 1.5
-idouble: 1.1031
-ifloat: 1.5
-
-# csin
-Test "Imaginary part of: csin (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# csinh
-Test "Imaginary part of: csinh (-2 - 3 i)":
-double: 1
-idouble: 1
-Test "Real part of: csinh (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: csinh (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# csqrt
-Test "Real part of: csqrt (-2 + 3 i)":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (-2 - 3 i)":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "Imaginary part of: csqrt (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-
-# ctan
-Test "Real part of: ctan (-2 - 3 i)":
-double: 1
-idouble: 1
-Test "Real part of: ctan (0.7 + 1.2 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: ctan (0.7 + 1.2 i)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
-float: 1
-ifloat: 1
-Test "Real part of: ctanh (0.7 + 1.2 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "Imaginary part of: ctanh (0.7 + 1.2 i)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-# erfc
-Test "erfc (0.7)":
-double: 1
-idouble: 1
-Test "erfc (1.2)":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-Test "erfc (2.0)":
-double: 1
-idouble: 1
-Test "erfc (4.1)":
-double: 24
-float: 12
-idouble: 24
-ifloat: 12
-
-# exp10
-Test "exp10 (-1)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "exp10 (0.7)":
-float: 1
-ifloat: 1
-Test "exp10 (3)":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-
-# expm1
-Test "expm1 (1)":
-float: 1
-ifloat: 1
-
-# fmod
-Test "fmod (-6.5, -2.3)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "fmod (-6.5, 2.3)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "fmod (6.5, -2.3)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "fmod (6.5, 2.3)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-# hypot
-Test "hypot (-0.7, -12.4)":
-float: 1
-ifloat: 1
-Test "hypot (-0.7, 12.4)":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, -0.7)":
-float: 1
-ifloat: 1
-Test "hypot (-12.4, 0.7)":
-float: 1
-ifloat: 1
-Test "hypot (0.7, -12.4)":
-float: 1
-ifloat: 1
-Test "hypot (0.7, 1.2)":
-double: 1
-idouble: 1
-Test "hypot (0.7, 12.4)":
-float: 1
-ifloat: 1
-Test "hypot (12.4, -0.7)":
-float: 1
-ifloat: 1
-Test "hypot (12.4, 0.7)":
-float: 1
-ifloat: 1
-
-# j0
-Test "j0 (10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "j0 (2.0)":
-float: 2
-ifloat: 2
-Test "j0 (8.0)":
-float: 1
-ifloat: 1
-
-# j1
-Test "j1 (10.0)":
-float: 2
-ifloat: 2
-Test "j1 (2.0)":
-double: 1
-idouble: 1
-Test "j1 (8.0)":
-double: 1
-idouble: 1
-
-# jn
-Test "jn (0, 10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "jn (0, 2.0)":
-float: 2
-ifloat: 2
-Test "jn (0, 8.0)":
-float: 1
-ifloat: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
-Test "jn (1, 2.0)":
-double: 1
-idouble: 1
-Test "jn (1, 8.0)":
-double: 1
-idouble: 1
-Test "jn (10, 0.1)":
-double: 6
-float: 4
-idouble: 6
-ifloat: 4
-Test "jn (10, 0.7)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "jn (10, 10.0)":
-double: 4
-float: 3
-idouble: 4
-ifloat: 3
-Test "jn (10, 2.0)":
-float: 4
-ifloat: 4
-Test "jn (3, 0.1)":
-double: 1
-idouble: 1
-Test "jn (3, 0.7)":
-float: 1
-ifloat: 1
-Test "jn (3, 10.0)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "jn (3, 2.0)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# lgamma
-Test "lgamma (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "lgamma (1.2)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# log
-Test "log (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# log10
-Test "log10 (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "log10 (e)":
-float: 1
-ifloat: 1
-
-# log1p
-Test "log1p (-0.3)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# log2
-Test "log2 (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# sincos
-Test "sincos (0.7) extra output 2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 1":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
-double: 1
-float: 0.5
-idouble: 1
-ifloat: 0.5
-Test "sincos (pi/2) extra output 2":
-double: 0.2758
-float: 0.3667
-idouble: 0.2758
-ifloat: 0.3667
-Test "sincos (pi/6) extra output 2":
-float: 1
-ifloat: 1
-
-# sinh
-Test "sinh (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# tan
-Test "tan (pi/4)":
-double: 0.5
-idouble: 0.5
-
-# tanh
-Test "tanh (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# tgamma
-Test "tgamma (-0.5)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (0.5)":
-float: 1
-ifloat: 1
-Test "tgamma (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# y0
-Test "y0 (0.7)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0)":
-float: 1
-ifloat: 1
-Test "y0 (8.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-# y1
-Test "y1 (0.1)":
-double: 1
-idouble: 1
-Test "y1 (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y1 (1.5)":
-float: 1
-ifloat: 1
-Test "y1 (10.0)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "y1 (2.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y1 (8.0)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-# yn
-Test "yn (0, 0.7)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 1.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 1.5)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "yn (0, 10.0)":
-float: 1
-ifloat: 1
-Test "yn (0, 8.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (1, 0.1)":
-double: 1
-idouble: 1
-Test "yn (1, 0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (1, 1.5)":
-float: 1
-ifloat: 1
-Test "yn (1, 10.0)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (1, 8.0)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "yn (10, 0.1)":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-Test "yn (10, 0.7)":
-double: 3
-idouble: 3
-Test "yn (10, 1.0)":
-double: 1
-idouble: 1
-Test "yn (10, 10.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (10, 2.0)":
-double: 2
-idouble: 2
-Test "yn (3, 0.1)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (3, 0.7)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (3, 10.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "yn (3, 2.0)":
-double: 1
-idouble: 1
-
-# Maximal error of functions:
-Function: "asin":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "atan2":
-float: 4
-ifloat: 4
-
-Function: "atanh":
-double: 1
-idouble: 1
-
-Function: "cabs":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "cacos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "cacos":
-float: 1
-ifloat: 1
-
-Function: Real part of "cacosh":
-double: 1
-float: 7
-idouble: 1
-ifloat: 7
-
-Function: Imaginary part of "cacosh":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Real part of "casin":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: Imaginary part of "casin":
-float: 1
-ifloat: 1
-
-Function: Real part of "casinh":
-double: 5
-float: 1
-idouble: 5
-ifloat: 1
-
-Function: Imaginary part of "casinh":
-double: 3
-float: 6
-idouble: 3
-ifloat: 6
-
-Function: Real part of "catan":
-float: 4
-ifloat: 4
-
-Function: Imaginary part of "catan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "catanh":
-double: 4
-float: 1
-idouble: 4
-ifloat: 1
-
-Function: Imaginary part of "catanh":
-double: 1
-float: 6
-idouble: 1
-ifloat: 6
-
-Function: "cbrt":
-double: 1
-idouble: 1
-
-Function: Real part of "ccos":
-double: 1
-idouble: 1
-
-Function: Imaginary part of "ccos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ccosh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "cexp":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "cexp":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "clog":
-double: 1
-float: 3
-idouble: 1
-ifloat: 3
-
-Function: Real part of "clog10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "clog10":
-double: 1
-float: 5
-idouble: 1
-ifloat: 5
-
-Function: "cos":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: Real part of "cpow":
-double: 1
-float: 4
-idouble: 1
-ifloat: 4
-
-Function: Imaginary part of "cpow":
-double: 1.1031
-float: 2
-idouble: 1.1031
-ifloat: 2
-
-Function: Imaginary part of "csin":
-float: 1
-ifloat: 1
-
-Function: Real part of "csinh":
-float: 1
-ifloat: 1
-
-Function: Imaginary part of "csinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "csqrt":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "csqrt":
-float: 1
-ifloat: 1
-
-Function: Real part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Imaginary part of "ctan":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: Real part of "ctanh":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: Imaginary part of "ctanh":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "erfc":
-double: 24
-float: 12
-idouble: 24
-ifloat: 12
-
-Function: "exp10":
-double: 6
-float: 2
-idouble: 6
-ifloat: 2
-
-Function: "expm1":
-float: 1
-ifloat: 1
-
-Function: "fmod":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "hypot":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "j0":
-double: 2
-float: 2
-idouble: 2
-ifloat: 2
-
-Function: "j1":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "jn":
-double: 6
-float: 4
-idouble: 6
-ifloat: 4
-
-Function: "lgamma":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-
-Function: "log":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "log10":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "log1p":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "log2":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "sincos":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "sinh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "tan":
-double: 0.5
-idouble: 0.5
-
-Function: "tanh":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "tgamma":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-
-Function: "y0":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-
-Function: "y1":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-Function: "yn":
-double: 3
-float: 2
-idouble: 3
-ifloat: 2
-
-# end of automatic generation
diff --git a/libc/sysdeps/sh/sys/ucontext.h b/libc/sysdeps/sh/sys/ucontext.h
deleted file mode 100644
index 2e072c0b6..000000000
--- a/libc/sysdeps/sh/sys/ucontext.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (C) 1999-2014 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
- <http://www.gnu.org/licenses/>. */
-
-/* Where is System V/SH ABI? */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-
-#include <features.h>
-#include <signal.h>
-
-typedef int greg_t;
-
-/* Number of general registers. */
-#define NFPREG 16
-
-/* Container for all general registers. */
-typedef greg_t gregset_t[NFPREG];
-
-/* Number of each register is the `gregset_t' array. */
-enum
-{
- R0 = 0,
-#define R0 R0
- R1 = 1,
-#define R1 R1
- R2 = 2,
-#define R2 R2
- R3 = 3,
-#define R3 R3
- R4 = 4,
-#define R4 R4
- R5 = 5,
-#define R5 R5
- R6 = 6,
-#define R6 R6
- R7 = 7,
-#define R7 R7
- R8 = 8,
-#define R8 R8
- R9 = 9,
-#define R9 R9
- R10 = 10,
-#define R10 R10
- R11 = 11,
-#define R11 R11
- R12 = 12,
-#define R12 R12
- R13 = 13,
-#define R13 R13
- R14 = 14,
-#define R14 R14
- R15 = 15,
-#define R15 R15
-};
-
-typedef int freg_t;
-
-/* Number of FPU registers. */
-#define NFREG 16
-
-/* Structure to describe FPU registers. */
-typedef freg_t fpregset_t[NFREG];
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- gregset_t gregs;
- fpregset_t fpregs;
- fpregset_t xfpregs;
- } mcontext_t;
-
-/* Userlevel context. */
-typedef struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- __sigset_t uc_sigmask;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- long int uc_filler[5];
- } ucontext_t;
-
-#endif /* sys/ucontext.h */
diff --git a/libc/sysdeps/sparc/fpu/libm-test-ulps b/libc/sysdeps/sparc/fpu/libm-test-ulps
index ecb871d6a..bf3cd45dd 100644
--- a/libc/sysdeps/sparc/fpu/libm-test-ulps
+++ b/libc/sysdeps/sparc/fpu/libm-test-ulps
@@ -1,123 +1,548 @@
# Begin of automatic generation
# acos_downward
-Test "acos_downward (-0)":
+Test "acos_downward (-0x8p-4)":
float: 1
ifloat: 1
-Test "acos_downward (-0.5)":
+ildouble: 1
+ldouble: 1
+
+# acos_towardzero
+Test "acos_towardzero (-0x8p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# acos_upward
+Test "acos_upward (+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x1p+0)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x4p-128)":
double: 1
idouble: 1
-Test "acos_downward (-1)":
+Test "acos_upward (-0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (-0x8p-972)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d496p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54646d497p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef54p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x1.70ef56p-56)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1024)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-1076)":
+double: 1
+idouble: 1
+Test "acos_upward (0x4p-128)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-152)":
+double: 1
+idouble: 1
+Test "acos_upward (0x8p-972)":
+double: 1
+idouble: 1
+
+# acosh
+Test "acosh (0x6.4p+4)":
+double: 1
+idouble: 1
+Test "acosh (0xf.ffffffffffff8p+1020)":
+double: 1
+Test "acosh (0xf.fffffp+124)":
+ldouble: 1
+
+# asin
+Test "asin (-0xf.ffffffffffff8p-4)":
+ildouble: 1
+ldouble: 1
+Test "asin (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_downward
+Test "asin_downward (-0x1p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0x8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffff8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffffffffp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_downward (-0xf.fffffp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "acos_downward (0)":
+Test "asin_downward (0x8p-4)":
float: 1
ifloat: 1
-Test "acos_downward (0.5)":
+Test "asin_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_tonearest
+Test "asin_tonearest (-0xf.ffffffffffff8p-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_tonearest (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_towardzero
+Test "asin_towardzero (-0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-128)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# acos_towardzero
-Test "acos_towardzero (-0)":
+Test "asin_towardzero (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-4)":
float: 1
ifloat: 1
-Test "acos_towardzero (-0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0x8p-972)":
double: 1
idouble: 1
-Test "acos_towardzero (-1)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (-0xf.fffffp-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (0x8p-4)":
float: 1
ifloat: 1
-Test "acos_towardzero (0)":
+ildouble: 1
+ldouble: 1
+Test "asin_towardzero (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# asin_upward
+Test "asin_upward (-0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "acos_towardzero (0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0x8p-152)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# acos_upward
-Test "acos_upward (-0)":
+Test "asin_upward (-0x8p-16448)":
ildouble: 1
ldouble: 1
-Test "acos_upward (-1)":
+Test "asin_upward (-0x8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "acos_upward (0)":
+Test "asin_upward (-0x8p-972)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# asin_downward
-Test "asin_downward (-0.5)":
+Test "asin_upward (-0xf.fffffff8p-4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "asin_downward (-1.0)":
+Test "asin_upward (-0xf.ffffffffffff8p-4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "asin_downward (0.5)":
+Test "asin_upward (-0xf.fffffffffffffffp-4)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (-0xf.fffffffffffp-4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "asin_downward (1.0)":
+Test "asin_upward (-0xf.fffffp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# asin_towardzero
-Test "asin_towardzero (-0.5)":
+ildouble: 2
+ldouble: 2
+Test "asin_upward (0x1p+0)":
double: 1
idouble: 1
-Test "asin_towardzero (-1.0)":
+Test "asin_upward (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "asin_towardzero (0.5)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-152)":
double: 1
-idouble: 1
-Test "asin_towardzero (1.0)":
float: 1
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "asin_upward (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
-# asin_upward
-Test "asin_upward (-1.0)":
+# asinh
+Test "asinh (-0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (-0xf.fffffp+124)":
+ldouble: 1
+Test "asinh (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "asinh (0x1p+100)":
+ildouble: 1
+ldouble: 1
+Test "asinh (0xap+0)":
float: 1
ifloat: 1
-Test "asin_upward (1.0)":
-ildouble: 1
+Test "asinh (0xf.ffffffffffff8p+1020)":
+double: 1
+Test "asinh (0xf.fffffp+124)":
ldouble: 1
# atan2
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036)":
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac28p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac291p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
ildouble: 1
ldouble: 1
-Test "atan2 (-0.75, -1.0)":
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac291p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac292p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca4838p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca483cp-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffc0f3eeb1ac3p-8, -0x7.57d1ep-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffcp-8, -0x7.57d1ep-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca4838p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca483cp-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51246640cc2340ca4ap-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716ffep-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1d8p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852716p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe81f852717p-8, -0x7.57d1de0e5124664p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1d8p-12)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "atan2 (-max_value, -min_value)":
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51246640cc2340ca48p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51246648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe82p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe8p-8, -0x7.57d1de0e51244p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x1.effe8p-8, -0x7.57d1de0e51248p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x2p-16384, -0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x4p-16384, -0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x4p-16448, -0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0x8p-16448, -0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xcp-4, -0x1p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xf.fffffffffffffffffffffffffff8p+16380, 0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (-0xf.fffffp+124, -0x4p-128)":
float: 1
ifloat: 1
-Test "atan2 (0.75, -1.0)":
+Test "atan2 (-0xf.fffffp+124, -0x8p-152)":
float: 1
ifloat: 1
+Test "atan2 (0x1.000002p+0, 0x1.0000000000001p+0)":
ildouble: 1
ldouble: 1
-Test "atan2 (1.390625, 0.9296875)":
+Test "atan2 (0x1.000002p+0, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x1.64p+0, 0xe.ep-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x4p-16384, -0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.301648p-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x6.4p-4, 0x1.30164ap-12)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0x8p-16448, -0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0xcp-4, -0x1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "atan2 (0xf.fffffffffffffffp+16380, 0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "atan2 (0xf.fffffp+124, -0x4p-128)":
+float: 1
+ifloat: 1
+Test "atan2 (0xf.fffffp+124, -0x8p-152)":
+float: 1
+ifloat: 1
# atanh
-Test "atanh (0.75)":
+Test "atanh (-0xcp-4)":
+float: 1
+ifloat: 1
+Test "atanh (0x1.2345p-20)":
+ildouble: 1
+ldouble: 1
+Test "atanh (0x4p-4)":
+ildouble: 1
+ldouble: 1
+Test "atanh (0xcp-4)":
float: 1
ifloat: 1
@@ -5872,415 +6297,2556 @@ float: 1
ifloat: 1
# cbrt
-Test "cbrt (-0.001)":
-ildouble: 1
-ldouble: 1
-Test "cbrt (-27.0)":
+Test "cbrt (-0x1.bp+4)":
double: 1
idouble: 1
-Test "cbrt (0.75)":
+Test "cbrt (-0x4.189374bc6a7ecp-12)":
+ildouble: 1
+ldouble: 1
+Test "cbrt (-0x4.189374bc6a7ef9ep-12)":
+ildouble: 1
+ldouble: 1
+Test "cbrt (-0x4.18937p-12)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cbrt (0xcp-4)":
double: 1
idouble: 1
-Test "cbrt (0.9921875)":
+Test "cbrt (0xf.ep-4)":
double: 1
idouble: 1
# ccos
-Test "Imaginary part of: ccos (-0.75 + 11357.25 i)":
+Test "Real part of: ccos (-0x2p+0 - 0x3p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 + 710.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 + 0x2.c68p+8 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-0.75 + 89.5 i)":
+Test "Real part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 + 89.5 i)":
+Test "Imaginary part of: ccos (-0xcp-4 + 0x5.98p+4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 11357.25 i)":
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c5d4p+12 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x1p-120 + 0x8p-32 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 710.5 i)":
+Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ccos (0x4p-16436 + 0x5.8cap+12 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-0.75 - 89.5 i)":
+Test "Imaginary part of: ccos (0x8p-32 + 0x1p-120 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-0.75 - 89.5 i)":
+Test "Real part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccos (0xcp-4 + 0x2.c68p+8 i)":
+double: 1
+idouble: 1
+Test "Real part of: ccos (0xcp-4 + 0x5.98p+4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (-2 - 3 i)":
+Test "Imaginary part of: ccos (0xcp-4 + 0x5.98p+4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c5d4p+12 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 + 1.25 i)":
+Test "Imaginary part of: ccos (0xcp-4 - 0x2.c68p+8 i)":
double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccos (0xcp-4 - 0x5.98p+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccos (0xcp-4 - 0x5.98p+4 i)":
float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# ccosh
+Test "Imaginary part of: ccosh (-0x2.c5d4p+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2.c5d4p+12 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-0x2.c68p+8 - 0xcp-4 i)":
+double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ccosh (-0x2p+0 - 0x3p+0 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 1.25 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccos (0.75 + 11357.25 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 + 710.5 i)":
+Test "Real part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 + 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (-0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c5d4p+12 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c5d4p+12 - 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ccosh (0x2.c68p+8 - 0xcp-4 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ccosh (0x5.8cap+12 + 0x4p-16436 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 + 89.5 i)":
+Test "Real part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 + 89.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 + 0xcp-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 11357.25 i)":
+Test "Real part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 710.5 i)":
+Test "Imaginary part of: ccosh (0x5.98p+4 - 0xcp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
double: 1
idouble: 1
+Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (+0 + 0x2.1e19e0c9bab24p+72 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (+0 + 0x2p+64 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccos (0.75 - 89.5 i)":
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0.75 - 89.5 i)":
+Test "Real part of: cexp (-0x2.71p+12 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.71p+12 + 0xf.fffffp+124 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2.dp+8 + 0xcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (-0x2p+0 - 0x3p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccos (0x1p-1074 + 1440 i)":
+Test "Imaginary part of: cexp (-0x5.fp+4 + 0xcp-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccos (0x1p-16434 + 22730 i)":
+Test "Real part of: cexp (0x1.f4p+8 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x1.f4p+8 + 0xf.fffffp+124 i)":
ildouble: 1
ldouble: 1
-
-# ccosh
-Test "Imaginary part of: ccosh (-11357.25 + 0.75 i)":
+Test "Real part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x2.c5dp+8 + 0xcp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-11357.25 - 0.75 i)":
+Test "Imaginary part of: cexp (0x3.2p+4 + 0x8p+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (0x5.8cap+12 + 0x4p-16436 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-2 - 3 i)":
+Test "Real part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-2 - 3 i)":
+Test "Imaginary part of: cexp (0x5.8cp+4 + 0xcp-4 i)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: cexp (0x5.ap+8 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: cexp (0xcp-4 + 0x1.4p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-710.5 + 0.75 i)":
+
+# clog
+Test "Real part of: clog (+0 + 0x4p-1076 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-710.5 - 0.75 i)":
+Test "Real part of: clog (+0 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (+0 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x1.2345678p-1000 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d1598p-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x4.8d159ep-32 i)":
double: 1
idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d159ep-32 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d15ap-32 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x4p-1076 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-89.5 + 0.75 i)":
+Test "Real part of: clog (-0x4p-1076 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-89.5 + 0.75 i)":
+Test "Real part of: clog (-0x4p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16496 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x4p-16496 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+124 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (-0x8p-152 + 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-152 - 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (-89.5 - 0.75 i)":
+Test "Imaginary part of: clog (-0x8p-152 - 0xf.fffffp+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x8p-16448 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (-89.5 - 0.75 i)":
+Test "Real part of: clog (-0x8p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+124 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (-0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0xf.8p+16380 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0xf.8p+16380 - 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + +0 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234566p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-1000 i)":
double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.23456789p-60 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x1.234568p-60 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.0000000000001p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.000002p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.23456789p-60 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c63p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
+double: 1
idouble: 1
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
+float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (0.75 + 1.25 i)":
+Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ccosh (11357.25 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed19ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (11357.25 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7c0beb59f6acp-4 + 0xf.ed19ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ccosh (22730 + 0x1p-16434 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bdfbf7p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (710.5 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd4p-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (710.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdfbf672a9da76bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdf8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.8907bep-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (89.5 + 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (89.5 + 0.75 i)":
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4ep-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b8p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a85944b988790cep-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a85944bap-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8594p-4 + 0xf.e6b4ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ccosh (89.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e08p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ccosh (89.5 - 0.75 i)":
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e0948p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e0948788cb0c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e0949p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x1p-16440 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-
-# cexp
-Test "Imaginary part of: cexp (-10000 + 0x1p16383 i)":
+Test "Real part of: clog (0x1p-16440 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7b8p-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7b8p-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7bcp-4 + 0xf.de3a2f9df7a4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.0ce7bcp-4 + 0xf.de3a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a38p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.82b794p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cb2p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281a934c6dd315cp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281a934c6dd315dp-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e81e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a38p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3613p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42a15bf9a3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a361243a89663e84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a361243a89663e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.2cdb84p-4 + 0xf.ae888f0455f6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae889p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dc2be0945a6p-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab874p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873d09e61e797a27ebc9f508p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e798p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.3b8f94p-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f94p-4 + 0xf.ab873p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.3b8f9p-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab754p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2e34p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2ep-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c58a83e57cp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (-2.0 - 3.0 i)":
+Test "Real part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c59p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-2.0 - 3.0 i)":
+Test "Imaginary part of: clog (0x3.6e17119fb8aab757d097f83d2fp-4 + 0xf.a0c59p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c772p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aab758p-4 + 0xf.a0c58a83e57c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c772fe5f777d04p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.6e17119fb8aacp-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-720 + 0.75 i)":
+Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c772fe5f777d043a8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c772fe5f777d044p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (-95 + 0.75 i)":
+Test "Imaginary part of: clog (0x3.6e171p-4 + 0xf.a0c58p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d118p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (0.75 + 1.25 i)":
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3501173c8004ccp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d118p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d619a8d118p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfd30b038eep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d619a8d12p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d6p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: cexp (0.75 + 1.25 i)":
+Test "Imaginary part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005dcbb5516d5479p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (1440 + 0x1p-1074 i)":
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (22730 + 0x1p-16434 i)":
+Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (50 + 0x1p127 i)":
-double: 2
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34cp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b3d1b06d005dcbb5516d5479p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d34p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacd9c6952d35p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebeacp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ebebp-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d005dcbb5516d548p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d08p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0a4p-4 + 0xf.859b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dcbb5516d544p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3d1b06d08p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x3.e1d0ap-4 + 0xf.859b3p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x3.e1d0ap-4 + 0xf.859b4p-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c1af8e3cec09p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3cfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209cp-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209dep-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acb1e5214b209dep-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb1e5214b209ep-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d758p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bb1839d865fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d758p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a2e36807cp-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a550c9d76p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
float: 1
-idouble: 2
ifloat: 1
+Test "Imaginary part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d758p-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (50 + 0x1p127 i)":
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865f0dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865f4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bb1839d865fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.d9e8c8p-4 + 0xf.3f303p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x4.d9e8cp-4 + 0xf.3f30281507d8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (500 + 0x1p1023 i)":
+Test "Real part of: clog (0x4p-1076 + +0 i)":
double: 1
idouble: 1
-Test "Real part of: cexp (709.8125 + 0.75 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)":
double: 1
idouble: 1
-Test "Imaginary part of: cexp (709.8125 + 0.75 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-1076 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16496 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4p-16496 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.03p-4 + 0xf.31ep-4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c58p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c58p-4 + 0xf.22364p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363bf989d9b5cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb14p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb14p-4 + 0xf.22364p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989d9b5cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
double: 1
idouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363bf989dap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.318c6p-4 + 0xf.22363p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x5.b06b680ea2ccp-4 + 0xe.f452b965da9fp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cexp (88.75 + 0.75 i)":
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452bp-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452b965da9fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: cexp (88.75 + 0.75 i)":
-float: 2
-ifloat: 2
+Test "Imaginary part of: clog (0x5.b06b7p-4 + 0xe.f452bp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x5.ba8cep-4 + 0xe.f0742p-4 i)":
ildouble: 1
ldouble: 1
-
-# clog
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i)":
+Test "Imaginary part of: clog (0x5.dbd1p-4 + 0xe.e387ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5037c4792efp-4 + 0xe.d3e21p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c4794p-4 + 0xe.d3e2086dcca8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e2086dcca8p-4 i)":
double: 1
idouble: 1
-Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i)":
+Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i)":
+Test "Imaginary part of: clog (0x6.02fd58p-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e21p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i)":
+Test "Real part of: clog (0x6.02fd5p-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.1c643068cd125ef6f796a57d2p-4 + 0xe.c97c2018b428p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef6f796a57d2p-4 + 0xe.c97c3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2018b428p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428257p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c3p-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x6.1c643p-4 + 0xe.c97c2018b4288p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cb019p-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cb08p-4 + 0xe.c36a599a86bbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cbp-4 + 0xe.c36a599a86baf8febep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86ba8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a599a86baf9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.2aff83ae6467cp-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff83ae6468p-4 + 0xe.c36a5p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86baf9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.59feap-4 + 0xe.af6f9p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b48p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b48p-4 + 0xe.8893dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520214p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520217b6p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb449253a1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x6.b10b5p-4 + 0xe.8893cbb449258p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.b10b5p-4 + 0xe.8893cbb44925p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e028p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e028p-4 + 0xd.e655fp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1319143490849p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349084p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae131914349086p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e510a94307614f1a74p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a94p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16445 i)":
+Test "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a94307614f1a77b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a94307614f1a78p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.eca92p-4 + 0xd.e655fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d384p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10d384p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10d8p-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b311p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca10dp-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1eca4p-4 + 0xd.e2d66p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160b31p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65939160bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d20a1ecap-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b31066ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f2c8d8p-4 + 0xd.e2d65939160b8p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8d8p-4 + 0xd.e2d66p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 + 0x1p-16494 i)":
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b311p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16445 i)":
+Test "Imaginary part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b311p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1.fp+16383 - 0x1p-16494 i)":
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160b8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Real part of: clog (0x7.f2c8dp-4 + 0xd.e2d65939160bp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f2c8dp-4 + 0xd.e2d65p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f4b083cb0bp-4 + 0xd.e1bf04f3688p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x7.f4b088p-4 + 0xd.e1bfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x7.f4b08p-4 + 0xd.e1bf04f3688p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.88fafp-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i)":
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.479468b09a37p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (-0x1p-16445 + 0x1.fp+16383 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16445 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x8p-1076 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-1076 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-1076 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x8p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8p-152 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+124 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x8p-152 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-16448 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8p-16448 - 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.a9cp-4 + 0xc.c0ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b4085cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b408p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b968a66p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b386fc56b969p-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317c470b41p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.b57bp-4 + 0xc.b7b4p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246ba85a5c8p-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bap-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16494 + 0x1.fp+16383 i)":
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (-0x1p-16494 - 0x1.fp+16383 i)":
+Test "Imaginary part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53dp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i)":
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53de1d5a7c8b1p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a24p-4 + 0xc.ae53ep-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8b0f6df3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8b0f6df3p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53dp-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53ep-4 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: clog (0x1.000566p0 + 0x1.234p-10 i)":
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1504p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f15065p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7e54a156f1508p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7ep-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8008p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a52p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c18p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c199f62998856b84p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i)":
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1.fp+16383 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1p-16445 i)":
+Test "Real part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199f62998856b8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0dp-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfb1b08p-4 + 0xb.e867ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 + 0x1p-16494 i)":
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df5894a70c8p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 - 0x1p-16445 i)":
+Test "Imaginary part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df589p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1.fp+16383 - 0x1p-16494 i)":
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966dfp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)":
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e8679p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i)":
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df589p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df58ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624348p-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e2624348p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
double: 1
idouble: 1
-Test "Real part of: clog (0x1p-147 + 0x1p-147 i)":
+Test "Imaginary part of: clog (0xa.afc57p-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.afc58p-4 + 0xb.e867932966df5894a70c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0xa.b96da19075eap-8 + 0xf.fc67818f89d2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.b96da19075eap-8 + 0xf.fc679p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc67818f89d2p-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i)":
+Test "Imaginary part of: clog (0xa.b96dap-8 + 0xf.fc678p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.b96dap-8 + 0xf.fc679p-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.b96dbp-8 + 0xf.fc67818f89d2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.e7de8p-4 + 0xb.b51cb9f04d4dp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51cbp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xa.e7de9p-4 + 0xb.b51ccp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a043561d0f42p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f25p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6058859a584e748p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6059p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
float: 1
ifloat: 1
-Test "Real part of: clog (0x1p-16445 + 0x1.fp+16383 i)":
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16445 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9ap-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16494 + 0x1.fp+16383 i)":
+Test "Imaginary part of: clog (0xb.263a7p-4 + 0xb.79c9bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x1p-16494 - 0x1.fp+16383 i)":
+Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i)":
+Test "Real part of: clog (0xf.8p+124 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0xf.8p+124 - 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0xf.8p+16380 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x4p-16496 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x298c62cb546588a7p-63 + 0x7911b1dfcc4ecdaep-63 i)":
+Test "Real part of: clog (0xf.8p+16380 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x2ede88p-23 + 0x771c3fp-23 i)":
+Test "Real part of: clog (0xf.8p+16380 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x3f96469050f650869c2p-75 + 0x6f16b2c9c8b05988335p-75 i)":
+Test "Real part of: clog (0xf.8p+16380 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x55cb6d0c83af5p-55 + 0x7fe33c0c7c4e90p-55 i)":
+Test "Real part of: clog (0xf.8p+16380 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)":
+Test "Real part of: clog (0xf.8p+16380 + 0xf.fffffp+124 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x659feap-24 + 0xeaf6f9p-24 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x6771f22c64ed551b857c128b4cp-105 + 0x1f570e7a13cc3cf2f44fd793ea1p-105 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x6b10b4f3520217b6p-64 + 0xe8893cbb449253a1p-64 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (0x8ecbf810c4ae6p-52 + 0xd479468b09a37p-52 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0x4p-16496 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0x9b57bp-20 + 0xcb7b4p-20 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xdb85c467ee2aadd5f425fe0f4b8dp-114 + 0x3e83162a0f95f1dcbf97dddf410eap-114 i)":
+Test "Real part of: clog (0xf.8p+16380 - 0x8p-16448 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xfd95243681c055c2632286921092p-113 + 0x1bccabcd29ca2152860ec29e34ef7p-113 i)":
+Test "Real part of: clog (0xf.ffffffffffff8p+1020 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: clog (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)":
+Test "Real part of: clog (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: clog (0xf.fffffp+124 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: clog (1.0 + 0x1.234566p-10 i)":
+Test "Real part of: clog (0xf.fffffp-4 + +0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.ffffffffffff8p-1004 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffffffffffffp-15004 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
# clog10
Test "Imaginary part of: clog10 (-0 + inf i)":
@@ -6658,209 +9224,1136 @@ idouble: 1
ifloat: 1
# cos
+Test "cos (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
Test "cos (0x1p+120)":
float: 1
ifloat: 1
-Test "cos (0x1p+127)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0x7p+0)":
float: 1
ifloat: 1
-Test "cos (M_PI_6l * 2.0)":
-double: 1
-idouble: 1
-Test "cos (M_PI_6l * 4.0)":
-double: 2
+Test "cos (0x8p+124)":
float: 1
-idouble: 2
ifloat: 1
+Test "cos (0xap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "cos (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos (0xf.fffffffffffffffp+16380)":
ildouble: 1
ldouble: 1
# cos_downward
-Test "cos_downward (1)":
+Test "cos_downward (-0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-128)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x8p-152)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.000002p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1.000004p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.000006p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c1522p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x1.0c1524p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x1.921fb4p+0)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1.921fb6p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x1p+120)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x1p+28)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a44p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0x2.182a4705ae6cap+0)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eacf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cb7665c1eadp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb08cp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6cb09p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2.182a48p+0)":
+float: 1
+ifloat: 1
+Test "cos_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_downward (0x2p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x3p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_downward (10)":
ildouble: 1
ldouble: 1
-Test "cos_downward (2)":
+Test "cos_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_downward (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (3)":
+Test "cos_downward (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p+0)":
float: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_downward (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "cos_downward (4)":
+Test "cos_downward (0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_downward (5)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0x9p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (6)":
+Test "cos_downward (0xa.217bap+12)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (7)":
+Test "cos_downward (0xap+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_downward (8)":
+Test "cos_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xc.d4966p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_downward (0xc.d4967p-4)":
float: 1
ifloat: 1
+Test "cos_downward (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_downward (0xf.fffffffffffffffp+16380)":
ildouble: 2
ldouble: 2
+Test "cos_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
# cos_tonearest
-Test "cos_tonearest (7)":
+Test "cos_tonearest (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1p+120)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x2.182a4705ae6ccp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0x7p+0)":
float: 1
ifloat: 1
+Test "cos_tonearest (0x8p+124)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xap+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "cos_tonearest (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_tonearest (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
# cos_towardzero
-Test "cos_towardzero (10)":
+Test "cos_towardzero (-0x2p-16384)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (2)":
+Test "cos_towardzero (-0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (3)":
+Test "cos_towardzero (-0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (5)":
+Test "cos_towardzero (-0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (-0xf.fffffp+124)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000000cf4a2a2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0000010b239a9p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.00000162a932bp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002d452a1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.000002p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.0c152382d7365p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1.921fb6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x1p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x1p+120)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "cos_towardzero (0x2.182a44p+0)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (6)":
+Test "cos_towardzero (0x2.182a4705ae6cap+0)":
ildouble: 1
ldouble: 1
-Test "cos_towardzero (7)":
+Test "cos_towardzero (0x2.182a4705ae6cb08cb7665c1eacp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.182a48p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x2p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x4p-1024)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-1076)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-128)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cos_towardzero (8)":
+Test "cos_towardzero (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0x8p-152)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p-16448)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0x8p-972)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xa.217bap+12)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "cos_towardzero (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+Test "cos_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
# cos_upward
-Test "cos_upward (1)":
+Test "cos_upward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (-0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (-0xf.fffffffffffffffffffffffffff8p+16380)":
ildouble: 1
ldouble: 1
-Test "cos_upward (10)":
+Test "cos_upward (0x1.000002p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1.000004p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.000005bc7d86dp+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.000006p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x1.0c1522p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_upward (4)":
+Test "cos_upward (0x1.0c152382d7366p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.0c1524p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x1.921fb4p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d1846ap+0)":
ildouble: 1
ldouble: 1
-Test "cos_upward (6)":
+Test "cos_upward (0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x1.921fb6p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x1p+120)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a44p+0)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cap+0)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacf6p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eacp+0)":
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.182a4705ae6cb08cb7665c1eadp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb08cp+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6cb09p+0)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a4705ae6ccp+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2.182a48p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x2.1e19e4p+72)":
+float: 1
+ifloat: 1
+Test "cos_upward (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x2p+64)":
+double: 1
+idouble: 1
+Test "cos_upward (0x3p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x6p+0)":
+double: 1
+idouble: 1
+Test "cos_upward (0x7p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0x8p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_upward (7)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0x8p+124)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "cos_upward (9)":
+Test "cos_upward (0x9p+0)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-
-# cosh_downward
-Test "cosh_downward (22)":
+Test "cos_upward (0xa.217bap+12)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cos_upward (0xap+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_downward (23)":
+Test "cos_upward (0xc.d4966p-4)":
float: 1
ifloat: 1
+Test "cos_upward (0xc.d4967p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "cos_upward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "cos_upward (0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "cos_upward (0xf.fffffffffffffffffffffffffff8p+16380)":
ildouble: 1
ldouble: 1
-Test "cosh_downward (24)":
+Test "cos_upward (0xf.fffffffffffffffp+16380)":
+ildouble: 1
+ldouble: 1
+
+# cosh
+Test "cosh (-0x1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# cosh_tonearest
-Test "cosh_tonearest (22)":
+Test "cosh (-0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x1.6p+4)":
ildouble: 1
ldouble: 1
+Test "cosh (0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh (0x2.c679dp+8)":
+double: 1
+idouble: 1
-# cosh_towardzero
-Test "cosh_towardzero (22)":
+# cosh_downward
+Test "cosh_downward (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_downward (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_downward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (-0x5.96a7ep+4)":
float: 1
ifloat: 1
+Test "cosh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "cosh_towardzero (23)":
+Test "cosh_downward (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_downward (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_downward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_downward (0x5.96a7ep+4)":
float: 1
ifloat: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (-0x1p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_tonearest (-0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x1.6p+4)":
ildouble: 1
ldouble: 1
-Test "cosh_towardzero (24)":
+Test "cosh_tonearest (0x2.c5d374p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_tonearest (0x2.c5e3acp+8)":
+double: 1
+idouble: 1
+Test "cosh_tonearest (0x2.c679dp+8)":
+double: 1
+idouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_towardzero (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_towardzero (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (-0x5.96a7ep+4)":
float: 1
ifloat: 1
+Test "cosh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
+Test "cosh_towardzero (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 1
+Test "cosh_towardzero (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5d37700c6bbp+12)":
+ldouble: 2
+Test "cosh_towardzero (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_towardzero (0x5.96a7ep+4)":
+float: 1
+ifloat: 1
# cosh_upward
-Test "cosh_upward (22)":
+Test "cosh_upward (-0x1p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "cosh_upward (23)":
+Test "cosh_upward (-0x2.c5d374p+12)":
+ldouble: 3
+Test "cosh_upward (-0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 2
+Test "cosh_upward (-0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_upward (-0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (-0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "cosh_upward (0x1.6p+4)":
ildouble: 1
ldouble: 1
-Test "cosh_upward (24)":
+Test "cosh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
+Test "cosh_upward (0x2.c5d374p+12)":
+ldouble: 3
+Test "cosh_upward (0x2.c5d37700c6bb03a4p+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5d37700c6bb03a6c24b6c9b494cp+12)":
+ldouble: 2
+Test "cosh_upward (0x2.c5d37700c6bb03a6c24b6c9b49p+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5d37700c6bbp+12)":
+ldouble: 1
+Test "cosh_upward (0x2.c5e3bp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679d1f73f0fap+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x2.c679dp+8)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x3.2p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7e8p+4)":
+double: 1
+idouble: 1
+Test "cosh_upward (0x5.96a7ep+4)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
# cpow
-Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
-float: 1
-ifloat: 1
-Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i)":
-ildouble: 1
-ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i)":
+Test "Real part of: cpow (0x2p+0 + +0 i, 0xap+0 + +0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-ildouble: 4
-ldouble: 4
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 0.0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: cpow (0x2p+0 + 0x3p+0 i, 0x4p+0 + +0 i)":
+float: 2
+ifloat: 2
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cpow (0xcp-4 + 0x1.4p+0 i, +0 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + +0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0x1p+0 + 0x1p+0 i)":
double: 2
float: 3
idouble: 2
ifloat: 3
ildouble: 2
ldouble: 2
-Test "Real part of: cpow (2 + 0 i, 10 + 0 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: cpow (2 + 3 i, 4 + 0 i)":
+Test "Real part of: cpow (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 4
idouble: 1
ifloat: 4
-ildouble: 2
-ldouble: 2
-Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i)":
-float: 2
-ifloat: 2
+ildouble: 4
+ldouble: 4
# csin
Test "Real part of: csin (-0.75 + 11357.25 i)":
@@ -7025,986 +10518,4292 @@ ildouble: 1
ldouble: 1
# csqrt
-Test "Real part of: csqrt (-0x1.0000000000000000000000000001p-16382 - 0x1.0000000000000000000000000001p-16382 i)":
+Test "Imaginary part of: csqrt (-0 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x2p+0 + 0x3p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000000000000000004p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000000000000000004p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (-0x4.0000000000000000000000000004p-16384 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (-0x4.0000000000000008p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (-0x1.0000000000000002p-16382 - 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (-0x4.0000000000000008p-16384 - 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.0000000000001p-1022 - 0x1.0000000000001p-1022 i)":
+Test "Real part of: csqrt (-0x4.0000000000004p-1024 - 0x4.0000000000004p-1024 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i)":
+Test "Imaginary part of: csqrt (-0x4.0000000000004p-1024 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x4.000008p-128 - 0x4.000008p-128 i)":
double: 1
idouble: 1
-Test "Real part of: csqrt (-2 + 3 i)":
-float: 1
-ifloat: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (-2 - 3 i)":
-float: 1
-ifloat: 1
+Test "Real part of: csqrt (-0x4p-16384 - 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (-0x8p-152 - 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-16440 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x1p-5000 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4.0000000000000000000000000004p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0.75 + 1.25 i)":
+Test "Real part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000000000000000000001p-16382 + 0x1.0000000000000000000000000001p-16382 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000000000000000000004p-16384 + 0x4p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Real part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000000002p-16382 + 0x1.0000000000000002p-16382 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.0000000000001p-1022 + 0x1.0000000000001p-1022 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000000008p-16384 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i)":
+Test "Imaginary part of: csqrt (0x4.0000000000004p-1024 + 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4.000008p-128 + 0x4.000008p-128 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i)":
-float: 1
-ifloat: 1
-Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-1076 + 0xf.fffffp+124 i)":
double: 1
idouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i)":
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4.0000000000000008p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16384 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16448 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x4p-16496 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p+1020 + 0x8p-152 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i)":
+Test "Imaginary part of: csqrt (0x8p+124 + 0x8p-152 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)":
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1.fp+16383 i)":
+Test "Imaginary part of: csqrt (0x8p+16380 + 0x8p-152 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1.fp+16383 + 0x1p+16383 i)":
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4.0000000000000008p-16384 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: csqrt (0x1p-16440 + 0x1p-16441 i)":
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4.0000000000004p-1024 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16384 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x4p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16444 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0x8p-152 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x8p-16448 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.8p+16380 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffff8p+1020 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.ffffffffffffbffffffffffffcp+1020 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0x1p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: csqrt (0xf.fffffp+124 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
# ctan
-Test "Real part of: ctan (-2 - 3 i)":
+Test "Real part of: ctan (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + +0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Imaginary part of: ctan (-2 - 3 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0.75 + 1.25 i)":
+Test "Imaginary part of: ctan (0x1.921fb4p+0 + 0x8p-152 i)":
double: 1
idouble: 1
+Test "Real part of: ctan (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + +0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x4p-1076 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x1p1023 + 1 i)":
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x1p+0 + 0x2.dp+4 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan (0x8p+1020 + 0x1p+0 i)":
double: 1
idouble: 1
-Test "Imaginary part of: ctan (0x1p1023 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+1020 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x1p127 + 1 i)":
+Test "Real part of: ctan (0x8p+124 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan (0x1p127 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (0x1p16383 + 1 i)":
+Test "Real part of: ctan (0x8p+16380 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan (0x1p16383 + 1 i)":
+Test "Imaginary part of: ctan (0x8p+16380 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (0x3.243f6cp-1 + 0 i)":
-float: 1
-ifloat: 1
+Test "Real part of: ctan (0xcp-4 + 0x1.4p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (1 + 355 i)":
+Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctan (1 + 365 i)":
+Test "Real part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctan (1 + 45 i)":
-ildouble: 2
-ldouble: 2
-Test "Real part of: ctan (1 + 47 i)":
+Test "Real part of: ctan (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
# ctan_downward
-Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb4p+0 + 0x8p-16448 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
ildouble: 4
ldouble: 4
-Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + +0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_downward (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+double: 6
+idouble: 6
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_downward (0x8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0x8p+124 + 0x1p+0 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_downward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Imaginary part of: ctan_downward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0xcp-4 + 0x1.4p+0 i)":
float: 1
ifloat: 1
-ildouble: 5
-ldouble: 5
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_downward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_downward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_downward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 5
+float: 5
+idouble: 5
+ifloat: 5
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_downward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_tonearest
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + +0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb4p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + +0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+double: 2
+idouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + +0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.dp+4 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x1p+0 + 0x2.fp+4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0x8p+16380 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_tonearest (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
# ctan_towardzero
-Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x4p-1076 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-152 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + +0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
-Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x1p-149 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 5
ldouble: 5
+Test "Real part of: ctan_towardzero (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0x1p+0 + 0x2.dp+4 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+double: 5
+idouble: 5
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+124 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_towardzero (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xcp-4 + 0x1.4p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_towardzero (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_towardzero (0xf.fffffp+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
# ctan_upward
-Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Real part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x1p-16445 i)":
+Test "Imaginary part of: ctan_upward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + +0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb4p+0 + 0x8p-152 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + +0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d1846ap+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-152 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + +0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
ildouble: 1
ldouble: 1
-Test "Real part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
double: 1
idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-152 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_upward (0x1.921fb54442d18p+0 + 0x1p-1074 i)":
+Test "Imaginary part of: ctan_upward (0x1.921fb54442d19p+0 + 0x8p-16448 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + +0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x4p-1076 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x8p-152 i)":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1.921fb6p+0 + 0x8p-16448 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63ap+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.63p+8 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctan_upward (0x1.921fb6p+0 + 0x1p-149 i)":
+Test "Real part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x1.6dp+8 i)":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.dp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan_upward (0x1p+0 + 0x2.fp+4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctan_upward (0x8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctan_upward (0x8p+124 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctan_upward (0x8p+16380 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctan_upward (0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctan_upward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctan_upward (0xf.ffffffffffff8p+1020 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctan_upward (0xf.ffffffffffffbffffffffffffcp+1020 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctan_upward (0xf.fffffp+124 + 0x1p+0 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+ildouble: 2
+ldouble: 2
# ctanh
-Test "Real part of: ctanh (-2 - 3 i)":
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (-2 - 3 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdap-4 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: ctanh (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i)":
+Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "Imaginary part of: ctanh (0x1.63p+8 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (0 + pi/4 i)":
+Test "Real part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+124 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh (0.75 + 1.25 i)":
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh (0.75 + 1.25 i)":
+Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)":
float: 2
ifloat: 2
-Test "Real part of: ctanh (1 + 0x1p1023 i)":
+
+# ctanh_downward
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (1 + 0x1p1023 i)":
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d18p+0 i)":
double: 1
idouble: 1
-Test "Real part of: ctanh (1 + 0x1p127 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (+0 + 0x1.921fb6p+0 i)":
double: 1
idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (1 + 0x1p127 i)":
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (+0 + 0xc.90fdap-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 4
+float: 1
+idouble: 4
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh (1 + 0x1p16383 i)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+1020 i)":
+double: 6
+idouble: 6
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+16380 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (1 + 0x1p16383 i)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 3
+idouble: 3
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (355 + 1 i)":
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (365 + 1 i)":
+Test "Real part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 5
+float: 5
+idouble: 5
+ifloat: 5
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh (45 + 1 i)":
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb4p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh (47 + 1 i)":
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-
-# ctanh_downward
-Test "Real part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctanh_downward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
ildouble: 4
ldouble: 4
-Test "Real part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctanh_downward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb4p+0 i)":
float: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 5
ldouble: 5
-Test "Imaginary part of: ctanh_downward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_downward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_downward (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_downward (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+# ctanh_tonearest
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdaa22168cp-4 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdap-4 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1.63p+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_downward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x1.6dp+8 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
ildouble: 2
ldouble: 2
-
-# ctanh_tonearest
-Test "Real part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x2.dp+4 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x2.fp+4 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Imaginary part of: ctanh_tonearest (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
ildouble: 3
ldouble: 3
-Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-152 + 0x1.921fb6p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_tonearest (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: ctanh_tonearest (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
# ctanh_towardzero
-Test "Real part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b80dcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 2
+idouble: 2
+Test "Imaginary part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1.6dp+8 + 0x1p+0 i)":
ildouble: 2
ldouble: 2
-Test "Imaginary part of: ctanh_towardzero (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
ildouble: 1
ldouble: 1
-Test "Real part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+1020 i)":
+double: 5
+idouble: 5
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 2
float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+16380 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x2.dp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 5
+ldouble: 5
+Test "Imaginary part of: ctanh_towardzero (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
ildouble: 5
ldouble: 5
-Test "Imaginary part of: ctanh_towardzero (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_towardzero (0x8p-152 + 0x1.921fb6p+0 i)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 4
+ldouble: 4
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_towardzero (0xcp-4 + 0x1.4p+0 i)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "Imaginary part of: ctanh_towardzero (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
# ctanh_upward
-Test "Real part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
-ildouble: 3
-ldouble: 3
-Test "Imaginary part of: ctanh_upward (0x1p-1074 + 0x1.921fb54442d18p+0 i)":
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+Test "Imaginary part of: ctanh_upward (+0 + 0x1.921fb6p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b80cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b80dc8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234c4c6628b81p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c234p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168c235p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdaa22168cp-4 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdap-4 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (+0 + 0xc.90fdbp-4 i)":
+float: 1
+ifloat: 1
+Test "Real part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "Imaginary part of: ctanh_upward (0x1p-149 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (-0x2p+0 - 0x3p+0 i)":
double: 2
float: 1
idouble: 2
ifloat: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 + 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (-0xc.35p+12 - 0xc.35p+12 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63ap+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63p+12 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "Real part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Imaginary part of: ctanh_upward (0x1.63p+8 + 0x1p+0 i)":
ildouble: 1
ldouble: 1
-Test "Imaginary part of: ctanh_upward (0x1p-16445 + 0x1.921fb54442d1846ap+0 i)":
+Test "Real part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1.6dp+8 + 0x1p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# erf
-Test "erf (1.25)":
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+1020 i)":
+double: 2
+idouble: 2
+ildouble: 5
+ldouble: 5
+Test "Real part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
double: 1
idouble: 1
-
-# erfc
-Test "erfc (0x1.f7303cp+1)":
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+16380 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffff8p+1020 i)":
double: 1
idouble: 1
-Test "erfc (0x1.ffa002p+2)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.ffffffffffffbffffffffffffcp+1020 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x1p+0 + 0xf.fffffp+124 i)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.dp+4 + 0x1p+0 i)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "erfc (0x1.ffffc8p+2)":
+Test "Real part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x2.fp+4 + 0x1p+0 i)":
+double: 1
+idouble: 1
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb4p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)":
ildouble: 1
ldouble: 1
-Test "erfc (2.0)":
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d18p+0 i)":
double: 1
idouble: 1
-Test "erfc (27.0)":
ildouble: 1
ldouble: 1
-Test "erfc (4.125)":
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-
-# exp10
-Test "exp10 (-1)":
+ildouble: 2
+ldouble: 2
+Test "Real part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x4p-1076 + 0x1.921fb6p+0 i)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb4p+0 i)":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d18p+0 i)":
double: 1
idouble: 1
-Test "exp10 (-305)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb54442d19p+0 i)":
double: 1
idouble: 1
-Test "exp10 (-36)":
+ildouble: 4
+ldouble: 4
+Test "Real part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
double: 1
+float: 3
idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-152 + 0x1.921fb6p+0 i)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "exp10 (3)":
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d1846ap+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d18p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 3
+ldouble: 3
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb54442d19p+0 i)":
+ildouble: 2
+ldouble: 2
+Test "Imaginary part of: ctanh_upward (0x8p-16448 + 0x1.921fb6p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 + 0xc.35p+12 i)":
double: 1
+float: 1
idouble: 1
-Test "exp10 (36)":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: ctanh_upward (0xc.35p+12 - 0xc.35p+12 i)":
double: 1
+float: 1
idouble: 1
-Test "exp10 (4932)":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)":
+float: 2
+ifloat: 2
ildouble: 1
ldouble: 1
-# exp2
-Test "exp2 (100.5)":
+# erf
+Test "erf (-0x7.ffffffffffffcp-4)":
ildouble: 1
ldouble: 1
+Test "erf (0x1.4p+0)":
+double: 1
+idouble: 1
-# exp_downward
-Test "exp_downward (2)":
+# erfc
+Test "erfc (-0x8p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "exp_downward (3)":
+Test "erfc (0x1.ap+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x1.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x3.ee6078p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x4.2p+0)":
+double: 1
+idouble: 1
+Test "erfc (0x6.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x6.a8p+4)":
+ildouble: 1
+ldouble: 1
+Test "erfc (0x7.fe8008p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# exp_towardzero
-Test "exp_towardzero (2)":
+Test "erfc (0x7.fffd6p+0)":
float: 1
ifloat: 1
+Test "erfc (0x7.ffff2p+0)":
+ildouble: 1
+ldouble: 1
+
+# exp10
+Test "exp10 (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10 (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10 (-0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10 (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10 (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_downward
+Test "exp10_downward (-0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (-0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (-0x1p+0)":
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.31p+8)":
ildouble: 1
ldouble: 1
-Test "exp_towardzero (3)":
+Test "exp10_downward (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e44p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e45573a1ddp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x1.348e45573a1dep+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "exp10_downward (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "exp10_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# exp10_tonearest
+Test "exp10_tonearest (-0x1.31p+8)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x1p+0)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (-0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_tonearest (0x2.4p+4)":
+double: 1
+idouble: 1
+Test "exp10_tonearest (0x3p+0)":
+double: 1
+idouble: 1
+
+# exp10_towardzero
+Test "exp10_towardzero (-0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (-0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (-0x1p+0)":
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e44p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e45573a1ddp+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x1.348e45573a1dep+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0x2.4p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "exp10_towardzero (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "exp10_towardzero (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# exp10_upward
+Test "exp10_upward (-0x1.31p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (-0x1.344p+12)":
+float: 1
+ifloat: 1
+Test "exp10_upward (-0x1.86ap+16)":
float: 1
ifloat: 1
+Test "exp10_upward (-0x2.4p+4)":
ildouble: 1
ldouble: 1
-
-# exp_upward
-Test "exp_upward (1)":
+Test "exp10_upward (-0xf.424p+16)":
+float: 1
+ifloat: 1
+Test "exp10_upward (-0xf.fffffp+124)":
float: 1
ifloat: 1
+Test "exp10_upward (0x1.31p+8)":
ildouble: 1
ldouble: 1
-
-# expm1
-Test "expm1 (-79.0)":
+Test "exp10_upward (0x1.344p+12)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e44p+8)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (0x1.348e45573a1dd72cp+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e45573a1ddp+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x1.348e45573a1dep+8)":
ildouble: 1
ldouble: 1
-Test "expm1 (0.75)":
+Test "exp10_upward (0x1.348e46p+8)":
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0x2.4p+4)":
double: 1
idouble: 1
-Test "expm1 (1)":
+ildouble: 1
+ldouble: 1
+Test "exp10_upward (0x3p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "exp10_upward (0xcp-4)":
+ildouble: 2
+ldouble: 2
+
+# exp2
+Test "exp2 (0x6.48p+4)":
ildouble: 1
ldouble: 1
-Test "expm1 (500.0)":
+
+# exp_downward
+Test "exp_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_downward (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_downward (0xcp-4)":
double: 1
idouble: 1
-# gamma
-Test "gamma (-0.5)":
+# exp_towardzero
+Test "exp_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x3p+0)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0x5.8b9028p+4)":
+double: 1
+idouble: 1
+Test "exp_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+
+# exp_upward
+Test "exp_upward (-0x2.e870a4p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88c2p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a7e5e88cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.e870a8p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe224p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe227861639p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x2.ebe228p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0x4.d2p+8)":
+double: 1
+idouble: 1
+Test "exp_upward (-0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "exp_upward (-0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "exp_upward (-0xf.fffffffffffffffffffffffffff8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "exp_upward (-0xf.fffffffffffffffp+16380)":
ildouble: 1
ldouble: 1
-Test "gamma (-0x1p-10)":
+Test "exp_upward (-0xf.fffffp+124)":
double: 1
idouble: 1
-Test "gamma (-0x1p-15)":
+ildouble: 1
+ldouble: 1
+Test "exp_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "exp_upward (0x2.c5cp+8)":
+double: 1
+idouble: 1
+Test "exp_upward (0x3.2p+4)":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (-0x1p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x2.6p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x2.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x4.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (-0x8p-32)":
+ildouble: 1
+ldouble: 1
+Test "expm1 (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1 (0x1p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "gamma (-0x1p-20)":
+Test "expm1 (0xcp-4)":
double: 1
idouble: 1
-Test "gamma (-0x1p-25)":
+
+# expm1_downward
+Test "expm1_downward (-0x1.1p+4)":
ildouble: 1
ldouble: 1
-Test "gamma (-0x1p-30)":
+Test "expm1_downward (-0x1p-100)":
ildouble: 1
ldouble: 1
-Test "gamma (-0x1p-40)":
+Test "expm1_downward (-0x1p-32)":
ildouble: 1
ldouble: 1
-Test "gamma (-0x1p-5)":
+Test "expm1_downward (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.dp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x4.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "expm1_downward (0x1.f4p+8)":
double: 1
idouble: 1
+Test "expm1_downward (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_downward (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# expm1_tonearest
+Test "expm1_tonearest (-0x1p+4)":
ildouble: 1
ldouble: 1
-Test "gamma (-0x1p-64)":
+Test "expm1_tonearest (-0x2.6p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x2.cp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x4.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (-0x8p-32)":
+ildouble: 1
+ldouble: 1
+Test "expm1_tonearest (0x1.f4p+8)":
+double: 1
+idouble: 1
+Test "expm1_tonearest (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_tonearest (0xcp-4)":
+double: 1
+idouble: 1
+
+# expm1_towardzero
+Test "expm1_towardzero (-0x1.1p+4)":
ildouble: 1
ldouble: 1
-Test "gamma (0.7)":
+Test "expm1_towardzero (-0x1p-100)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (0x1p-10)":
+Test "expm1_towardzero (-0x1p-32)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (0x1p-30)":
+Test "expm1_towardzero (-0x1p-64)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "gamma (0x1p-5)":
+Test "expm1_towardzero (-0x2.4p+4)":
ildouble: 1
ldouble: 1
-Test "gamma (0x1p-60)":
+Test "expm1_towardzero (-0x2.dp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_towardzero (-0x4.fp+4)":
ildouble: 1
ldouble: 1
-Test "gamma (0x1p-70)":
+Test "expm1_towardzero (-0x4p-12)":
ildouble: 1
ldouble: 1
-Test "gamma (1.2)":
+Test "expm1_towardzero (-0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_towardzero (0x1.f4p+8)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "expm1_towardzero (0x3.2p+4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "expm1_towardzero (0x7.fp+4)":
+double: 1
+idouble: 1
+
+# expm1_upward
+Test "expm1_upward (-0x1.1p+4)":
ildouble: 1
ldouble: 1
-
-# hypot
-Test "hypot (-0.7, -12.4)":
+Test "expm1_upward (-0x1p-100)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-0.7, 12.4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x1p-32)":
float: 1
ifloat: 1
-Test "hypot (-12.4, -0.7)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x1p-64)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (-12.4, 0.7)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.4p+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.dp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x2.ep+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4.bp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4p-12)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (-0x4p-52)":
float: 1
ifloat: 1
-Test "hypot (0.7, -12.4)":
+Test "expm1_upward (-0x8p-32)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (0x1p-100)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (0.7, 12.4)":
+Test "expm1_upward (0x1p-32)":
float: 1
ifloat: 1
-Test "hypot (12.4, -0.7)":
+Test "expm1_upward (0x1p-64)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "hypot (12.4, 0.7)":
+Test "expm1_upward (0x4p-52)":
+float: 1
+ifloat: 1
+Test "expm1_upward (0x7.fp+4)":
+ildouble: 1
+ldouble: 1
+Test "expm1_upward (0x8p-32)":
float: 1
ifloat: 1
-# j0
-Test "j0 (-0x1.001000001p+593)":
+# gamma
+Test "gamma (-0x1p-20)":
+double: 1
+idouble: 1
+Test "gamma (-0x1p-40)":
ildouble: 1
ldouble: 1
-Test "j0 (-4.0)":
+Test "gamma (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (0.75)":
+Test "gamma (-0x4p-12)":
+double: 1
+idouble: 1
+Test "gamma (-0x4p-32)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-28)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (-0x8p-8)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1.3333333333333332p+0)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1.3333333333333333333333333333p+0)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x1p-60)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x4p-12)":
float: 1
ifloat: 1
-Test "j0 (0x1.d7ce3ap+107)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "j0 (0x1p1023)":
+Test "gamma (0x4p-32)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "gamma (0x4p-72)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0x8p-8)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "gamma (0xb.333333333333p-4)":
+double: 1
+idouble: 1
+Test "gamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0xb.3333333333333333333333333338p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333338p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333333333333333p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333333333333333p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333333333333333333333334p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333333333333333333333334p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333334p-4, -0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.333333333333334p-4, 0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.3333333333338p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, -0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33333p-4, 0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666664p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666666666666666666668p+0, -0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666666666666666666668p+0, 0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66666666666666666666666668p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666p+0, -0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666666p+0, 0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666667p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.666666666666667p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, -0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (-0xc.66667p+0, 0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdef0123456789ab8p-500, 0x1.23456789abcdep-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdef02p-500, 0x1.23456789abcdfp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdefp-500, 0x1.23456789abcdfp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdep-500, 0x1.23456789abcdef0123456789ab8p-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdfp-500, 0x1.23456789abcdef02p-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0x1.23456789abcdfp-500, 0x1.23456789abcdefp-500)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333338p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333338p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333333333333333p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333333333333333p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333333333333333333333334p-4, -0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333333333333333333333334p-4, 0xc.66667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333334p-4, -0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.333333333333334p-4, 0xc.666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.3333333333338p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, -0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.66666666666666666666666664p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.666666666666666666666666666p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.66666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33333p-4, 0xc.666666666666667p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, -0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666666666666666666668p+0)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xb.33334p-4, 0xc.6666666666668p+0)":
+double: 1
+idouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666664p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666666666666666666668p+0, -0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666666666666666666668p+0, 0xb.33334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.3333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666666666666666p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, -0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, 0xb.333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66666666666666666666666668p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666p+0, -0xb.333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666666p+0, 0xb.333333333333334p-4)":
ildouble: 1
ldouble: 1
-Test "j0 (0x1p16383)":
+Test "hypot (0xc.666666666666667p+0, -0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.666666666666667p+0, 0xb.33333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.6666666666668p+0, -0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.6666666666668p+0, 0xb.33334p-4)":
+double: 1
+idouble: 1
+Test "hypot (0xc.66667p+0, -0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, -0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, -0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.333333333333333333333333333p-4)":
+ildouble: 1
+ldouble: 1
+Test "hypot (0xc.66667p+0, 0xb.33333333333333333333333334p-4)":
+ildouble: 1
+ldouble: 1
+
+# j0
+Test "j0 (-0x2.002000002p+592)":
ildouble: 2
ldouble: 2
-Test "j0 (10.0)":
-double: 2
+Test "j0 (-0x4p+0)":
+double: 1
float: 1
-idouble: 2
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "j0 (-0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 2
ldouble: 2
-Test "j0 (2.0)":
+Test "j0 (0x2p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "j0 (4.0)":
+Test "j0 (0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "j0 (8.0)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x4p+16380)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x8p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# j1
-Test "j1 (-1.0)":
+Test "j0 (0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "j0 (0x8p+16380)":
+ildouble: 2
+ldouble: 2
+Test "j0 (0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "j0 (0xcp-4)":
+float: 1
+ifloat: 1
+Test "j0 (0xe.be71dp+104)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "j0 (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0.75)":
+Test "j0 (0xf.ffffffffffffbffffffffffffcp+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1.3ffp+74)":
+Test "j0 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+# j1
+Test "j1 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "j1 (0x1.ff00000000002p+840)":
+Test "j1 (0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "j1 (0x2p+0)":
+double: 1
+idouble: 1
+Test "j1 (0x4.ffcp+72)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "j1 (0x1p1023)":
+Test "j1 (0x4p+16380)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1p16382)":
+Test "j1 (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "j1 (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "j1 (0x1p16383)":
+Test "j1 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "j1 (1.0)":
-ildouble: 1
-ldouble: 1
-Test "j1 (10.0)":
+Test "j1 (0xap+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "j1 (2.0)":
+Test "j1 (0xcp-4)":
+ildouble: 1
+ldouble: 1
+Test "j1 (0xf.ffffffffffff8p+1020)":
double: 1
idouble: 1
-Test "j1 (8.0)":
+Test "j1 (0xf.fffffp+124)":
double: 1
+float: 1
idouble: 1
-ildouble: 4
-ldouble: 4
+ifloat: 1
# jn
-Test "jn (0, -4.0)":
+Test "jn (0, -0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 0.75)":
-float: 1
-ifloat: 1
-Test "jn (0, 10.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "jn (0, 2.0)":
+ildouble: 1
+ldouble: 1
+Test "jn (0, 0x2p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "jn (0, 4.0)":
+Test "jn (0, 0x4p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (0, 8.0)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "jn (1, -1.0)":
-ildouble: 1
-ldouble: 1
-Test "jn (1, 0.75)":
ildouble: 1
ldouble: 1
-Test "jn (1, 1.0)":
+Test "jn (0, 0x8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (1, 10.0)":
-float: 2
-ifloat: 2
+Test "jn (0, 0xap+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (1, 2.0)":
+Test "jn (0, 0xcp-4)":
+float: 1
+ifloat: 1
+Test "jn (1, 0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (1, 0x2p+0)":
double: 1
idouble: 1
-Test "jn (1, 8.0)":
+Test "jn (1, 0x8p+0)":
double: 1
idouble: 1
ildouble: 4
ldouble: 4
-Test "jn (10, -1.0)":
+Test "jn (1, 0xap+0)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (1, 0xcp-4)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, -0x1p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (10, 0x1p+0)":
ildouble: 1
ldouble: 1
-Test "jn (10, 0.125)":
+Test "jn (10, 0x2p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (10, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 0.75)":
+Test "jn (10, 0xap+0)":
+double: 4
+float: 2
+idouble: 4
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (10, 0xcp-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 1.0)":
+Test "jn (2, 0x2.67a2a4p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "jn (10, 10.0)":
-double: 4
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (2, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+Test "jn (2, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+ildouble: 3
+ldouble: 3
+Test "jn (2, 0x2.67a2a8p+0)":
+double: 1
float: 3
-idouble: 4
+idouble: 1
ifloat: 3
+Test "jn (2, 0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x8p+124)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "jn (10, 2.0)":
-double: 1
+Test "jn (2, 0xf.fffb1p+96)":
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
-Test "jn (2, 0x1.ffff62p+99)":
+Test "jn (2, 0xf.ffffffffffff8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "jn (2, 0xf.fffffp+124)":
double: 2
float: 2
idouble: 2
ifloat: 2
-Test "jn (2, 0x1p1023)":
+ildouble: 2
+ldouble: 2
+Test "jn (3, 0x2.67a2a4p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
ildouble: 1
ldouble: 1
-Test "jn (2, 0x1p127)":
+Test "jn (3, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 5
+ldouble: 5
+Test "jn (3, 0x2.67a2a5d2e36801p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (3, 0x2.67a2a5d2e3682p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "jn (2, 0x1p16383)":
-ildouble: 2
-ldouble: 2
-Test "jn (2, 2.4048255576957729)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+Test "jn (3, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
ildouble: 1
ldouble: 1
-Test "jn (3, 0.125)":
+Test "jn (3, 0x2.67a2a8p+0)":
double: 1
-float: 1
+float: 3
idouble: 1
+ifloat: 3
+ildouble: 1
+ldouble: 1
+Test "jn (3, 0x2p+0)":
+float: 1
ifloat: 1
-Test "jn (3, 0.75)":
+Test "jn (3, 0x2p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "jn (3, 10.0)":
+Test "jn (3, 0xap+0)":
double: 3
-float: 1
idouble: 3
-ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (3, 2.0)":
+Test "jn (3, 0xcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (4, 0x2.67a2a4p+0)":
float: 1
ifloat: 1
-Test "jn (3, 2.4048255576957729)":
-double: 3
-idouble: 3
ildouble: 1
ldouble: 1
-Test "jn (4, 2.4048255576957729)":
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (4, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (4, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (4, 0x2.67a2a5d2e3682p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "jn (5, 2.4048255576957729)":
-double: 3
+Test "jn (4, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+Test "jn (4, 0x2.67a2a8p+0)":
float: 1
-idouble: 3
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a4p+0)":
+double: 1
+float: 1
+idouble: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "jn (6, 2.4048255576957729)":
+Test "jn (5, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (5, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (5, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (5, 0x2.67a2a5d2e36801p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (5, 0x2.67a2a5d2e3682p+0)":
+double: 1
+idouble: 1
+ildouble: 3
+ldouble: 3
+Test "jn (5, 0x2.67a2a5d2e368p+0)":
+double: 2
+idouble: 2
+Test "jn (5, 0x2.67a2a8p+0)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (6, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 5
+ldouble: 5
+Test "jn (6, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (6, 0x2.67a2a5d2e3682p+0)":
+double: 2
+idouble: 2
+ildouble: 1
+ldouble: 1
+Test "jn (6, 0x2.67a2a5d2e368p+0)":
double: 4
-float: 3
idouble: 4
+ildouble: 3
+ldouble: 3
+Test "jn (6, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
ifloat: 3
-ildouble: 5
-ldouble: 5
-Test "jn (7, 2.4048255576957729)":
-double: 3
-float: 5
-idouble: 3
-ifloat: 5
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a4p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (7, 0x2.67a2a5d2e36800fcp+0)":
ildouble: 3
ldouble: 3
-Test "jn (8, 2.4048255576957729)":
+Test "jn (7, 0x2.67a2a5d2e36801p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (7, 0x2.67a2a5d2e3682p+0)":
+ildouble: 1
+ldouble: 1
+Test "jn (7, 0x2.67a2a5d2e368p+0)":
double: 3
-float: 2
idouble: 3
+ildouble: 2
+ldouble: 2
+Test "jn (7, 0x2.67a2a8p+0)":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "jn (8, 0x2.67a2a4p+0)":
+double: 2
+float: 2
+idouble: 2
ifloat: 2
-ildouble: 8
-ldouble: 8
-Test "jn (9, 2.4048255576957729)":
+ildouble: 2
+ldouble: 2
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10cap+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (8, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (8, 0x2.67a2a5d2e36801p+0)":
+ildouble: 4
+ldouble: 4
+Test "jn (8, 0x2.67a2a5d2e3682p+0)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "jn (8, 0x2.67a2a5d2e368p+0)":
+double: 3
+idouble: 3
+Test "jn (8, 0x2.67a2a8p+0)":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+ildouble: 4
+ldouble: 4
+Test "jn (9, 0x2.67a2a4p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10ca66p+0)":
ildouble: 3
ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10ca68p+0)":
+ildouble: 3
+ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e36800fce3e16f10cbp+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (9, 0x2.67a2a5d2e36800fcp+0)":
+ildouble: 7
+ldouble: 7
+Test "jn (9, 0x2.67a2a5d2e36801p+0)":
+ildouble: 2
+ldouble: 2
+Test "jn (9, 0x2.67a2a5d2e3682p+0)":
+double: 4
+idouble: 4
+ildouble: 3
+ldouble: 3
+Test "jn (9, 0x2.67a2a5d2e368p+0)":
+double: 1
+idouble: 1
+ildouble: 4
+ldouble: 4
+Test "jn (9, 0x2.67a2a8p+0)":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
# lgamma
-Test "lgamma (-0.5)":
-ildouble: 1
-ldouble: 1
-Test "lgamma (-0x1p-10)":
+Test "lgamma (-0x1p-20)":
double: 1
idouble: 1
-Test "lgamma (-0x1p-15)":
+Test "lgamma (-0x1p-40)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x1p-64)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (-0x2p-16)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "lgamma (-0x1p-20)":
+Test "lgamma (-0x4p-12)":
double: 1
idouble: 1
-Test "lgamma (-0x1p-25)":
+Test "lgamma (-0x4p-32)":
ildouble: 1
ldouble: 1
-Test "lgamma (-0x1p-30)":
+Test "lgamma (-0x8p-28)":
ildouble: 1
ldouble: 1
-Test "lgamma (-0x1p-40)":
+Test "lgamma (-0x8p-4)":
ildouble: 1
ldouble: 1
-Test "lgamma (-0x1p-5)":
+Test "lgamma (-0x8p-8)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "lgamma (-0x1p-64)":
+Test "lgamma (0x1.3333333333333332p+0)":
ildouble: 1
ldouble: 1
-Test "lgamma (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Test "lgamma (0x1.3333333333333333333333333333p+0)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0x1p-60)":
ildouble: 1
ldouble: 1
-Test "lgamma (0x1p-10)":
+Test "lgamma (0x4p-12)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "lgamma (0x1p-30)":
+Test "lgamma (0x4p-32)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "lgamma (0x1p-5)":
+Test "lgamma (0x4p-72)":
ildouble: 1
ldouble: 1
-Test "lgamma (0x1p-60)":
+Test "lgamma (0x8p-8)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.3333333333333333333333333338p-4)":
ildouble: 1
ldouble: 1
-Test "lgamma (0x1p-70)":
+Test "lgamma (0xb.333333333333333p-4)":
ildouble: 1
ldouble: 1
-Test "lgamma (1.2)":
+Test "lgamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "lgamma (0xb.333333333333p-4)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "lgamma (0xb.33333p-4)":
+double: 1
+idouble: 1
+
+# log
+Test "log (0x2.b7e151628aed2a68p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e151628aed2a6abf7158809cf4p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e151628aed2p+0)":
+ildouble: 1
+ldouble: 1
+Test "log (0x2.b7e15p+0)":
+float: 1
+ifloat: 1
+Test "log (0x4p-1076)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16384)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16448)":
+ildouble: 1
+ldouble: 1
+Test "log (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "log (0x8p-152)":
ildouble: 1
ldouble: 1
# log10
-Test "log10 (0.75)":
+Test "log10 (0x1.999998p-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x1.999999999999ap-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x1.99999ap-4)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x2.b7e151628aed2a6cp+0)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x2.b7e154p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "log10 (0x4p-1024)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0x4p-16496)":
+ildouble: 1
+ldouble: 1
+Test "log10 (0xcp-4)":
double: 1
float: 2
idouble: 1
ifloat: 2
-Test "log10 (e)":
-float: 1
-ifloat: 1
ildouble: 1
ldouble: 1
# log1p
-Test "log1p (-0.25)":
+Test "log1p (-0x4p-4)":
+float: 1
+ifloat: 1
+Test "log1p (0x1.b7e151628aed2p+0)":
+ildouble: 1
+ldouble: 1
+Test "log1p (0x1.b7e15p+0)":
float: 1
ifloat: 1
# log2
-Test "log2 (0.75)":
+Test "log2 (0x2.b7e151628aed2a6cp+0)":
+ildouble: 1
+ldouble: 1
+Test "log2 (0xcp-4)":
ildouble: 1
ldouble: 1
# pow
-Test "pow (0x0.fffffffffffff8p0, -0x1.23456789abcdfp62)":
+Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde02468acf1357p+124)":
ildouble: 1
ldouble: 1
-Test "pow (0x0.ffffffp0, -0x1p24)":
-float: 1
-ifloat: 1
+Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde04p+124)":
ildouble: 1
ldouble: 1
-Test "pow (0x0.ffffffp0, 0x1p24)":
-float: 1
-ifloat: 1
-Test "pow (0x1.000002p0, 0x1p24)":
+Test "pow (0x1.0000000000001p+0, -0x2.468adp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
-Test "pow (10.0, -4930.0)":
+Test "pow (0xap+0, -0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow (0xap+0, 0x1.341p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4929.0)":
+Test "pow (0xap+0, 0x1.342p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4930.0)":
+Test "pow (0xap+0, 0x1.343p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4931.0)":
+Test "pow (0xap+0, 0x1.344p+12)":
ildouble: 1
ldouble: 1
-Test "pow (10.0, 4932.0)":
+Test "pow (0xd.72cb2a95c7ef6cce81bf1e825ba8p+16380, 0xcp-4)":
ildouble: 1
ldouble: 1
-Test "pow (1e4932, 0.75)":
+Test "pow (0xf.ffffffffffff8p-4, -0x4.8d159e26af37cp+60)":
ildouble: 1
ldouble: 1
+Test "pow (0xf.fffffffffffffffffffffffffff8p-4, -0x4.8d1598p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
# pow10
-Test "pow10 (-1)":
+Test "pow10 (-0x1.31p+8)":
double: 1
idouble: 1
-Test "pow10 (-305)":
+Test "pow10 (-0x1p+0)":
double: 1
idouble: 1
-Test "pow10 (-36)":
+Test "pow10 (-0x2.4p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "pow10 (3)":
+Test "pow10 (0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x1.348e45573a1dd72cp+8)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x1.348e46p+8)":
+ildouble: 1
+ldouble: 1
+Test "pow10 (0x2.4p+4)":
double: 1
idouble: 1
-Test "pow10 (36)":
+Test "pow10 (0x3p+0)":
double: 1
idouble: 1
-Test "pow10 (4932)":
-ildouble: 1
-ldouble: 1
# pow_downward
Test "pow_downward (1.5, 1.03125)":
float: 1
ifloat: 1
+# pow_tonearest
+Test "pow_tonearest (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde02468acf1357p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde04p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.0000000000001p+0, -0x2.468adp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
+float: 1
+ifloat: 1
+Test "pow_tonearest (0xap+0, -0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.341p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.342p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.343p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xap+0, 0x1.344p+12)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xd.72cb2a95c7ef6cce81bf1e825ba8p+16380, 0xcp-4)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.ffffffffffff8p-4, -0x4.8d159e26af37cp+60)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffffffffffffffffffffffff8p-4, -0x4.8d1598p+124)":
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffp-4, -0x1p+24)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_tonearest (0xf.fffffp-4, 0x1p+24)":
+float: 1
+ifloat: 1
+
# pow_towardzero
Test "pow_towardzero (1.5, 1.03125)":
float: 1
@@ -8017,903 +14816,2509 @@ ifloat: 1
ildouble: 1
ldouble: 1
+# sin
+Test "sin (-0x1.921fb4p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x1p+0)":
+float: 1
+ifloat: 1
+Test "sin (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.be736p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2a04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d08p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin (0x5.fbec78p+0)":
+ildouble: 1
+ldouble: 1
+
# sin_downward
-Test "sin_downward (10)":
+Test "sin_downward (-0x1.921fb4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x1.921fb6p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707ab4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c232dd99707abp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c23p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b2c24p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (-0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (-0x8.60a92p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x1p+120)":
+float: 1
+ifloat: 1
+Test "sin_downward (0x1p+28)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_downward (2)":
+Test "sin_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.1e19e4p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.1e19ep+72)":
+float: 2
+ifloat: 2
+Test "sin_downward (0x2.553534p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x3.be735c19be9fep+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9ffffcp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffeap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735c19be9fffffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.be735cp+0)":
ildouble: 1
ldouble: 1
-Test "sin_downward (3)":
+Test "sin_downward (0x3.be736p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (4)":
+Test "sin_downward (0x3.ec2a0250032a0000000000000072p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a0004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032a2p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a0250032ap+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x3.ec2a04p+0)":
ildouble: 1
ldouble: 1
-Test "sin_downward (5)":
+Test "sin_downward (0x3.ec2ap+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_downward (6)":
+Test "sin_downward (0x3p+0)":
float: 1
ifloat: 1
-Test "sin_downward (8)":
ildouble: 1
ldouble: 1
-Test "sin_downward (9)":
+Test "sin_downward (0x4.093385688a2d1508p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.093385688a2d4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f70800000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e153f7084p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x4.1237e153f708p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237e8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.1237ep+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d08p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4.c92d1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec7477d4a8000000000000009cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7477d4a84p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7477d4a8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x5.fbec78p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5.fbec7p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x5p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x6p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_downward (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_downward (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_downward (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_downward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_downward (0xf.fffffp+124)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
# sin_tonearest
-Test "sin_tonearest (1)":
+Test "sin_tonearest (-0x1.921fb4p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x1.921fb54442d18p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x1.921fb54442d19p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x1p+0)":
float: 1
ifloat: 1
-Test "sin_tonearest (3)":
+Test "sin_tonearest (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.be736p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2a04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d08p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bf04p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x4.c92d0ffa4bfp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_tonearest (0x5.fbec78p+0)":
ildouble: 1
ldouble: 1
# sin_towardzero
-Test "sin_towardzero (1)":
+Test "sin_towardzero (-0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x8.60a91c16b9b2c232dd99707ab3d8p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (-0x8.60a91p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18468p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51701b8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x1p+0)":
float: 1
ifloat: 1
-Test "sin_towardzero (10)":
+Test "sin_towardzero (0x1p+28)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.1e19ep+72)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sin_towardzero (2)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (3)":
+Test "sin_towardzero (0x2.553534p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2.5535376715bap+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "sin_towardzero (4)":
+Test "sin_towardzero (0x3.be735cp+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "sin_towardzero (0x3.ec2a0250032a000000000000007p+0)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (5)":
+Test "sin_towardzero (0x3.ec2a04p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "sin_towardzero (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.093385688a2d1508p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.093385688a2d4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.093388p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237e153f7084p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.1237e8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.1237ep+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf0000000000000008cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x4p+48)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a80000000000000098p+0)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (8)":
+Test "sin_towardzero (0x5.fbec7477d4a800000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "sin_towardzero (9)":
+Test "sin_towardzero (0x5.fbec7477d4a80008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7477d4a8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x8p+1020)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0x9p+0)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0xc.d4966d92d1708p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4966p-4)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xc.d4967p-4)":
+float: 1
+ifloat: 1
+Test "sin_towardzero (0xe.ef3afp-4)":
float: 1
ifloat: 1
+Test "sin_towardzero (0xf.ffffcp+124)":
+double: 1
+idouble: 1
+Test "sin_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_towardzero (0xf.ffffffffffffbffffffffffffcp+1020)":
ildouble: 1
ldouble: 1
# sin_upward
-Test "sin_upward (1)":
+Test "sin_upward (-0x1.921fb4p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sin_upward (10)":
+Test "sin_upward (-0x1.921fb54442d18468p+0)":
ildouble: 1
ldouble: 1
-Test "sin_upward (2)":
-float: 2
-ifloat: 2
-Test "sin_upward (3)":
+Test "sin_upward (-0x1.921fb54442d18469898cc517018p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18469898cc51701b8p+0)":
ildouble: 1
ldouble: 1
-Test "sin_upward (4)":
+Test "sin_upward (-0x1.921fb54442d18469898cc51701b9p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18469898cc51702p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d1846ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d18p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb54442d19p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x1.921fb6p+0)":
float: 1
ifloat: 1
-Test "sin_upward (6)":
ildouble: 1
ldouble: 1
-Test "sin_upward (7)":
+Test "sin_upward (-0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b28p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab3d8p-4)":
+ildouble: 3
+ldouble: 3
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab3dp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707ab4p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c232dd99707abp-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c23p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b2c24p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91c16b9b3p-4)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (-0x8.60a91p-4)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (-0x8.60a92p-4)":
ildouble: 1
ldouble: 1
-Test "sin_upward (9)":
+Test "sin_upward (0x1.921fb4p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1.921fb6p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x1p+120)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# sincos
-Test "sincos (0x1p+120) extra output 2":
+Test "sin_upward (0x1p+28)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x2.1e19ep+72)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "sincos (0x1p+127) extra output 2":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x2.5535376715b9ep+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2.553538p+0)":
+double: 1
+idouble: 1
+Test "sin_upward (0x2p+0)":
float: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 1":
+Test "sin_upward (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fep+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9ffffcp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffe8p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffeap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19be9fffffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be735c19beap+0)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x3.be735cp+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "sincos (M_PI_6l*2.0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.be736p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a0000000000000072p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a000000000000007p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x3.ec2a0250032a00000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a0004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032a2p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a0250032ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2a04p+0)":
double: 1
+float: 1
idouble: 1
-Test "sincos (pi/6) extra output 2":
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3.ec2ap+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x3p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# sinh_downward
-Test "sinh_downward (22)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x4.093385688a2d4p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.093385688a2dp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.09338p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x4.1237e153f7080000000000000004p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f70800000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f7080008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e153f7084p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x4.1237e153f708p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237e8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.1237ep+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_downward (23)":
+Test "sin_upward (0x4.c92d08p+0)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf00000000000000088p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf0000000000000008cp+0)":
ildouble: 2
ldouble: 2
-Test "sinh_downward (24)":
+Test "sin_upward (0x4.c92d0ffa4bf000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf00008p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bf04p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d0ffa4bfp+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4.c92d1p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-
-# sinh_towardzero
-Test "sinh_towardzero (22)":
+Test "sin_upward (0x4p+0)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x4p+48)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7477d4a80000000000000098p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a8000000000000009cp+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7477d4a800000000000002p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a80008p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec7477d4a84p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7477d4a8p+0)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0x5.fbec78p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5.fbec7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x5p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "sinh_towardzero (23)":
+Test "sin_upward (0x6p+0)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0x7p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sin_upward (0x8.60a91c16b9b3p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a91p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8.60a92p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0x8p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0x8p+124)":
+double: 1
+idouble: 1
+Test "sin_upward (0x9p+0)":
+float: 1
+ifloat: 1
+Test "sin_upward (0xap+0)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "sinh_towardzero (24)":
+Test "sin_upward (0xb.fa09ap+100)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0xc.d4966d92d171p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xc.d4967p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xcp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8008p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3af1b5d8p-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3afp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xe.ef3bp-4)":
+double: 1
+idouble: 1
+Test "sin_upward (0xf.ffffcp+124)":
+ildouble: 1
+ldouble: 1
+Test "sin_upward (0xf.ffffffffffff8p+1020)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 2
+ldouble: 2
+Test "sin_upward (0xf.fffffp+124)":
+ildouble: 1
+ldouble: 1
+
+# sincos
+Test "sincos (0x1.0c1522p+0) extra output 1":
+float: 1
+ifloat: 1
+Test "sincos (0x1.921fb54442d1846ap+0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1.921fb54442d18p+0) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1p+120) extra output 2":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sincos (0x1p+28) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x2.1e19e0c9bab24p+72) extra output 1":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x2p+64) extra output 1":
+ildouble: 1
+ldouble: 1
+Test "sincos (0x8.60a92p-4) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0x8p+124) extra output 2":
+float: 1
+ifloat: 1
+Test "sincos (0xc.d4967p-4) extra output 2":
float: 1
ifloat: 1
+Test "sincos (0xf.ffffffffffff8p+1020) extra output 2":
+ildouble: 1
+ldouble: 1
+Test "sincos (0xf.ffffffffffffbffffffffffffcp+1020) extra output 2":
+ildouble: 1
+ldouble: 1
+
+# sinh_downward
+Test "sinh_downward (0x1.6p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0x1.7p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0x1.8p+4)":
+ildouble: 1
+ldouble: 1
+Test "sinh_downward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (0x1.6p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_towardzero (0x1.7p+4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_towardzero (0xcp-4)":
+ildouble: 1
+ldouble: 1
# sinh_upward
-Test "sinh_upward (22)":
+Test "sinh_upward (0x1.7p+4)":
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (0x1.8p+4)":
+double: 1
+idouble: 1
+Test "sinh_upward (0x8p-32)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# tan
+Test "tan (-0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fdp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan (-0xc.90fp-4)":
ildouble: 1
ldouble: 1
-Test "sinh_upward (23)":
+Test "tan (0x3p+0)":
ildouble: 1
ldouble: 1
-Test "sinh_upward (24)":
+Test "tan (0x6p+0)":
ildouble: 1
ldouble: 1
# tan_downward
-Test "tan_downward (1)":
+Test "tan_downward (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.908p-4)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.90cp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90ep-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (10)":
+Test "tan_downward (-0xc.90f8p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_downward (2)":
+Test "tan_downward (-0xc.90fcp-4)":
+float: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fd8p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdap-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdbp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_downward (-0xc.90fdp-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (6)":
+Test "tan_downward (-0xc.90fep-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_downward (8)":
+Test "tan_downward (-0xc.90fp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_downward (9)":
+Test "tan_downward (-0xc.91p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-
-# tan_towardzero
-Test "tan_towardzero (10)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.92p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (-0xc.98p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.9p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (-0xc.ap-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x1p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x2.1e19e0c9bab24p+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2.1e19ep+72)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x2p+64)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x3p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x4p+0)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x6p+0)":
+double: 1
+idouble: 1
+Test "tan_downward (0x7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0x8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.908p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_towardzero (3)":
+Test "tan_downward (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fdbp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xc.90fep-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.91p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xc.92p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (4)":
+Test "tan_downward (0xc.94p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (5)":
+Test "tan_downward (0xc.98p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_towardzero (6)":
+Test "tan_downward (0xc.ap-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_downward (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_downward (0xf.fffffp+124)":
+ildouble: 1
+ldouble: 1
+
+# tan_tonearest
+Test "tan_tonearest (-0xc.90fdcp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (-0xc.90fdp-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (-0xc.90fp-4)":
ildouble: 1
ldouble: 1
-Test "tan_towardzero (9)":
+Test "tan_tonearest (0x3p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_tonearest (0x6p+0)":
+ildouble: 1
+ldouble: 1
+
+# tan_towardzero
+Test "tan_towardzero (-0x2p+64)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.908p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+Test "tan_towardzero (-0xc.90cp-4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
+Test "tan_towardzero (-0xc.90f8p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fcp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fd8p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fdap-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.91p-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (-0xc.98p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (-0xc.ap-4)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x1p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2.1e19e0c9bab24p+72)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x2.1e19ep+72)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2p+0)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x2p+64)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0x7p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x8p+0)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x8p+16380)":
+ildouble: 1
+ldouble: 1
+Test "tan_towardzero (0x9p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.908p-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_towardzero (0xc.90cp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdaa22168c8p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.90fdp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xc.98p-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xcp-4)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_towardzero (0xf.fffffp+124)":
+double: 1
+idouble: 1
# tan_upward
-Test "tan_upward (1)":
+Test "tan_upward (-0xc.908p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (-0xc.90cp-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tan_upward (10)":
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90ep-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (2)":
+Test "tan_upward (-0xc.90f8p-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fcp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fd8p-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fdap-4)":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tan_upward (-0xc.90fdbp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdcp-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fdp-4)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (-0xc.90fep-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (-0xc.90fp-4)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (3)":
+Test "tan_upward (-0xc.91p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (4)":
+Test "tan_upward (-0xc.94p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (-0xc.98p-4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (5)":
+Test "tan_upward (-0xc.9p-4)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tan_upward (6)":
+Test "tan_upward (-0xc.ap-4)":
ildouble: 1
ldouble: 1
-Test "tan_upward (9)":
+Test "tan_upward (0x1p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x2.1e19e4p+72)":
+double: 1
+idouble: 1
+Test "tan_upward (0x2.1e19ep+72)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# tanh
-Test "tanh (-0.75)":
+Test "tan_upward (0x2p+64)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (-1.0)":
+Test "tan_upward (0x4p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (0.75)":
+Test "tan_upward (0x5p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0x7p+0)":
+float: 1
+ifloat: 1
+Test "tan_upward (0x8p+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tanh (1.0)":
+Test "tan_upward (0x9p+0)":
+double: 1
+idouble: 1
+Test "tan_upward (0xap+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tan_upward (0xc.908p-4)":
+float: 1
+ifloat: 1
+Test "tan_upward (0xc.90ep-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90f8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fd8p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdap-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.90fdbp-4)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-
-# tgamma
-Test "tgamma (-0.5)":
+Test "tan_upward (0xc.90fdcp-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.90fep-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.90fp-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.91p-4)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.92p-4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x0.fffffffffffff8p0)":
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.94p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.98p-4)":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tan_upward (0xc.9p-4)":
+double: 1
+idouble: 1
+Test "tan_upward (0xc.ap-4)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x0.ffffffffffffffffffffffffffff8p0)":
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x0.ffffffp0)":
+Test "tan_upward (0xcp-4)":
float: 1
ifloat: 1
+Test "tan_upward (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "tan_upward (0xf.fffffp+124)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.0000000000000002p0)":
+
+# tanh
+Test "tanh (-0x1p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.0000000000001p0)":
+Test "tanh (-0xcp-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.000002p0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x1.0a32a2p+5)":
-float: 2
-ifloat: 2
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x1.5800000080001p+7)":
+Test "tanh (0x1p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.fffffffffffffffep0)":
+Test "tanh (0xcp-4)":
+ildouble: 1
+ldouble: 1
+
+# tgamma
+Test "tgamma (-0x1.0000000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1.fffffffffffffp0)":
+Test "tgamma (-0x1.0000000000001p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffep0)":
+Test "tgamma (-0x1.000002p+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x1.3ffffep+4)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffffep0)":
+Test "tgamma (-0x1.3ffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.fffffffffffffffffffffffff8p0)":
+Test "tgamma (-0x1.3fffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x13.ffffffffffffp0)":
+Test "tgamma (-0x1.3ffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x14.000000000000000000000000001p0)":
+Test "tgamma (-0x1.4000000000000000000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x14.000000000001p0)":
+Test "tgamma (-0x1.4000000000001p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x14.00002p0)":
+Test "tgamma (-0x1.400002p+4)":
float: 1
ifloat: 1
ildouble: 4
ldouble: 4
-Test "tgamma (-0x1d.ffffep0)":
+Test "tgamma (-0x1.dffffep+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.fffffffffffffffffffffffff8p0)":
+Test "tgamma (-0x1.dfffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1d.ffffffffffffp0)":
+Test "tgamma (-0x1.dffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000000000000000000001p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x1e.00000000000000000000000008p0)":
+Test "tgamma (-0x1.e000000000000000000000000001p+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0x1.e00000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000000002p0)":
+Test "tgamma (-0x1.e000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1e.000000000001p0)":
+Test "tgamma (-0x1.e000000000001p+4)":
double: 3
idouble: 3
-Test "tgamma (-0x1e.00002p0)":
+Test "tgamma (-0x1.e00002p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x1.f3ffffffffffffffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1f3.ffffffffffffffffffffffffffp0)":
+Test "tgamma (-0x1.f3ffffffffffffffffffffffffffp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x1p-24)":
+Test "tgamma (-0x1.f3fffffffffffp+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x1.f40000000000000000000000008p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000000000000000000002p0)":
+Test "tgamma (-0x1.f40002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.0000000000002p0)":
-double: 1
-idouble: 1
+Test "tgamma (-0x1.fffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.000004p0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+Test "tgamma (-0x1.fffffffffffffp+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.0000000000000000000000000002p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.00000000000000000000000001p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2.fffffcp0)":
+Test "tgamma (-0x2.0000000000002p+0)":
double: 1
-float: 1
idouble: 1
+Test "tgamma (-0x2.000004p+0)":
+double: 2
+float: 1
+idouble: 2
ifloat: 1
-Test "tgamma (-0x2.ffffffffffffep0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.fffffffffffep0)":
+Test "tgamma (-0x2.146544p+4)":
+float: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x2.7fffffffffffep+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffffffffffffcp0)":
+Test "tgamma (-0x2.7ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x27.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.7ffffffffffffffffffffffffffep+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x27.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.7fffffffffffffffffffffffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.8000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.0000000000000000000000001p0)":
+Test "tgamma (-0x2.80000000000000000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.000000000002p0)":
+Test "tgamma (-0x2.8000000000002p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.00004p0)":
+Test "tgamma (-0x2.800004p+4)":
double: 2
idouble: 2
ildouble: 2
ldouble: 2
-Test "tgamma (-0x28.ffffcp0)":
+Test "tgamma (-0x2.8ffffcp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x28.ffffffffffffffcp0)":
+Test "tgamma (-0x2.8fffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.8ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x28.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.8ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.000000000000000000000000002p0)":
+Test "tgamma (-0x2.8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "tgamma (-0x2.9000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.0000000000000000000000001p0)":
+Test "tgamma (-0x2.90000000000000000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x29.00004p0)":
+Test "tgamma (-0x2.900004p+4)":
double: 1
idouble: 1
-Test "tgamma (-0x29.ffffcp0)":
+Test "tgamma (-0x2.9ffffcp+4)":
double: 1
idouble: 1
-Test "tgamma (-0x29.fffffffffffep0)":
+Test "tgamma (-0x2.9fffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.ffffffffffffffcp0)":
+Test "tgamma (-0x2.9ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.9ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x29.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x2.9fffffffffffffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000000000000000000002p0)":
+Test "tgamma (-0x2.a000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.0000000000000000000000001p0)":
+Test "tgamma (-0x2.a000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000000004p0)":
+Test "tgamma (-0x2.a000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2a.000000000002p0)":
+Test "tgamma (-0x2.a00004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2ed.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x2.edfffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x2ee.00000000000004p0)":
+Test "tgamma (-0x2.edffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.00000000000000000000000001p0)":
+Test "tgamma (-0x2.edfffffffffffffffffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.000004p0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "tgamma (-0x3.fffffcp0)":
+Test "tgamma (-0x2.ee00000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.ee00000000000004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x2.ee00000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.ee0004p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.fffffcp+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x3.ffffffffffffep0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x3.fffffffffffffffcp0)":
+Test "tgamma (-0x2.ffffffffffffep+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x2.fffffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3.fffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.00000000000000000000000001p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x3.000004p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x3.1ffffcp+4)":
+double: 1
+idouble: 1
ildouble: 2
ldouble: 2
-Test "tgamma (-0x31.fffffffffffep0)":
+Test "tgamma (-0x3.1fffffffffffep+4)":
double: 3
idouble: 3
ildouble: 2
ldouble: 2
-Test "tgamma (-0x31.ffffffffffffffcp0)":
+Test "tgamma (-0x3.1ffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x31.ffffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.1ffffffffffffffffffffffffffep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x31.fffffffffffffffffffffffffp0)":
+Test "tgamma (-0x3.1fffffffffffffffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x32.000000000000000000000000002p0)":
+Test "tgamma (-0x3.2000000000000000000000000002p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x32.0000000000000000000000001p0)":
+Test "tgamma (-0x3.2000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x32.000000000000004p0)":
+Test "tgamma (-0x3.200004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e7.fffffffffffffcp0)":
+Test "tgamma (-0x3.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x3.e7fffffffffffffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e7.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x3.e7fffffffffffffffffffffffffep+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x3.e7ffffffffffffffffffffffffp+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e800000000000000000000000002p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e8000000000000000000000001p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e800000000000004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x3.e800000000002p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x3e8.00000000000000000000000002p0)":
+Test "tgamma (-0x3.e80004p+8)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x3e8.00000000000004p0)":
+Test "tgamma (-0x3.fffffcp+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (-0x3.ffffffffffffep+0)":
+double: 2
+idouble: 2
+Test "tgamma (-0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.0000000000004p0)":
+Test "tgamma (-0x3.fffffffffffffffffffffffffffep+0)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x4.000008p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.000008p0)":
+Test "tgamma (-0x4.8p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffff8p0)":
+Test "tgamma (-0x4.e1fffffffffffffffffffffffep+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e2000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e200000000000008p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e200000000004p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x4.e20008p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x4.fffff8p+0)":
double: 1
idouble: 1
-Test "tgamma (-0x4.ffffffffffffcp0)":
+Test "tgamma (-0x4.ffffffffffffcp+0)":
double: 1
idouble: 1
+Test "tgamma (-0x4.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x4.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x4.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x4.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.0000000000000008p0)":
+Test "tgamma (-0x5.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.0000000000004p0)":
+Test "tgamma (-0x5.0000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.000008p0)":
+Test "tgamma (-0x5.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x5.fffff8p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x5.ffffffffffffcp0)":
+Test "tgamma (-0x5.8p+0)":
double: 1
idouble: 1
+Test "tgamma (-0x5.dbfffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.fffffffffffffff8p0)":
+Test "tgamma (-0x5.dbfffffffffffffffffffffffffcp+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x5.dc00000000000000000000000004p+8)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x5.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x5.dc000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x5.dc00000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x5.dc0008p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5db.fffffffffffff8p0)":
+Test "tgamma (-0x5.fffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5db.fffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x5.ffffffffffffcp+0)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x5dc.00000000000000000000000004p0)":
+Test "tgamma (-0x5.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x6.0000000000000000000000000004p0)":
+Test "tgamma (-0x5.fffffffffffffffffffffffffep+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x5.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.00000000000000000000000002p0)":
+Test "tgamma (-0x6.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.0000000000004p0)":
+Test "tgamma (-0x6.00000000000000000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.000008p0)":
+Test "tgamma (-0x6.000008p+0)":
float: 2
ifloat: 2
ildouble: 2
ldouble: 2
-Test "tgamma (-0x6.fffff8p0)":
+Test "tgamma (-0x6.3ffff8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.3fffffffffffcp+4)":
double: 2
-float: 1
idouble: 2
+Test "tgamma (-0x6.3ffffffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.3ffffffffffffffffffffffffep+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.4000000000000000000000000004p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.40000000000000000000000002p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.4000000000004p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.400008p+4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.8p+0)":
+float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.ffffffffffffcp0)":
-double: 4
-idouble: 4
+Test "tgamma (-0x6.d5fff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.fffffffffffffff8p0)":
+Test "tgamma (-0x6.d5ffffffffffcp+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x6.d5fffffffffffff8p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x63.fffffffffffcp0)":
-double: 2
-idouble: 2
-Test "tgamma (-0x63.ffffffffffffff8p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x63.ffffffffffffffffffffffffep0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x64.000000000000000000000000004p0)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (-0x64.0000000000000000000000002p0)":
+Test "tgamma (-0x6.d5fffffffffffffffffffffffep+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x64.000000000004p0)":
-double: 1
-idouble: 1
+Test "tgamma (-0x6.d600000000000000000000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6d5.fffffffffffff8p0)":
+Test "tgamma (-0x6.d6000000000000000000000002p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.d600000000000008p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6d6.00000000000000000000000004p0)":
+Test "tgamma (-0x6.d600000000004p+8)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x6e3.00000000000000000000000004p0)":
+Test "tgamma (-0x6.e2fffffffffffffffffffffffep+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.e300000000000000000000000004p+8)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0x6.e3000000000000000000000002p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x6.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x6.ffffffffffffcp+0)":
+double: 4
+idouble: 4
+Test "tgamma (-0x6.fffffffffffffff8p+0)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x7.0000000000000008p0)":
+Test "tgamma (-0x6.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.0000000000004p0)":
+Test "tgamma (-0x7.0000000000000008p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x7.0000000000004p+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.000008p0)":
+Test "tgamma (-0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-0x7.fffff8p0)":
+Test "tgamma (-0x7.8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (-0x7.fffff8p+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "tgamma (-0x7.ffffffffffffcp0)":
+Test "tgamma (-0x7.ffffffffffffcp+0)":
double: 3
idouble: 3
-Test "tgamma (-0x7.fffffffffffffff8p0)":
+Test "tgamma (-0x7.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.fffffffffffffffffffffffffep0)":
+Test "tgamma (-0x7.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x7.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (-0x7.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.0000000000000000000000000008p0)":
+Test "tgamma (-0x8.0000000000000000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.00000000000000000000000004p0)":
+Test "tgamma (-0x8.00000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.0000000000008p0)":
+Test "tgamma (-0x8.0000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x8.00001p0)":
+Test "tgamma (-0x8.00001p+0)":
double: 2
idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (-0x9.ffffffffffff8p0)":
+Test "tgamma (-0x8.8p+0)":
double: 1
+float: 1
idouble: 1
-Test "tgamma (-0x9.fffffffffffffffffffffffffff8p0)":
-ildouble: 1
-ldouble: 1
-Test "tgamma (-0x9.fffffp0)":
+ifloat: 1
+Test "tgamma (-0x8p-4)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-Test "tgamma (-0x95.ffffffffffffffp0)":
+Test "tgamma (-0x9.5ffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.000000000000000000000000008p0)":
+Test "tgamma (-0x9.5ffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.0000000000000000000000004p0)":
+Test "tgamma (-0x9.60000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0x96.00000000000001p0)":
+Test "tgamma (-0x9.600000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0x96.000000000008p0)":
+Test "tgamma (-0x9.6000000000008p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.60001p+4)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x9.ffffffffffff8p+0)":
+double: 1
+idouble: 1
+Test "tgamma (-0x9.fffffffffffffffffffffffffff8p+0)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0x9.fffffp+0)":
+float: 1
+ifloat: 1
+Test "tgamma (-0xa.00001p+0)":
double: 1
idouble: 1
-Test "tgamma (-0xa.0000000000008p0)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xa.00001p0)":
+Test "tgamma (-0xa.c000000400008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xa.c0001p+4)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb4.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.4ffffffffffffffffffffffffcp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.4ffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb4.ffffffffffffffp0)":
+Test "tgamma (-0xb.4ffffffffffffffp+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.50000000000000000000000004p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.500000000000001p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.5000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.0000000000000000000000004p0)":
+Test "tgamma (-0xb.5ffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.00000000000001p0)":
+Test "tgamma (-0xb.5ffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb5.000000000008p0)":
+Test "tgamma (-0xb.60000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb5.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.600000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.00000000000001p0)":
+Test "tgamma (-0xb.6000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.000000000008p0)":
+Test "tgamma (-0xb.6fffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.fffffffffff8p0)":
+Test "tgamma (-0xb.6ffffffffffffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb6.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.6ffffffffffffffffffffffffff8p+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0xb7.000000000000000000000000008p0)":
+Test "tgamma (-0xb.7000000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.00000000000001p0)":
+Test "tgamma (-0xb.700000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xb7.000000000008p0)":
+Test "tgamma (-0xb.7000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.70001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb7.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.7ffffffffffffffffffffffffcp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xb8.00000000000001p0)":
+Test "tgamma (-0xb.7ffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbb.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.800000000000001p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.bfffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.bffffffffffffffffffffffffcp+4)":
ildouble: 3
ldouble: 3
-Test "tgamma (-0xbb.ffffffffffffffffffffffffff8p0)":
+Test "tgamma (-0xb.bffffffffffffffffffffffffff8p+4)":
ildouble: 4
ldouble: 4
-Test "tgamma (-0xbc.000000000000000000000000008p0)":
+Test "tgamma (-0xb.bffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbc.0000000000000000000000004p0)":
+Test "tgamma (-0xb.c000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.c0000000000000000000000004p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.c00000000000001p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbc.00000000000001p0)":
+Test "tgamma (-0xb.c000000000008p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbc.ffffffffffffffp0)":
+Test "tgamma (-0xb.c0001p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.cfffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.cffffffffffffffffffffffffcp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.cffffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbd.000000000000000000000000008p0)":
+Test "tgamma (-0xb.cffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbd.00000000000001p0)":
+Test "tgamma (-0xb.cffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.d000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.d00000000000001p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xb.dfffffffffff8p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.dffffffffffffffp+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbd.ffffffffffffffp0)":
+Test "tgamma (-0xb.dffffp+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.e000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xb.e000000000008p+4)":
ildouble: 2
ldouble: 2
-Test "tgamma (-0xbe.000000000000000000000000008p0)":
+Test "tgamma (-0xb.e0001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.0000000000000000000000004p0)":
+Test "tgamma (-0xb.efffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.ffffffffffffffffffffffffcp0)":
+Test "tgamma (-0xb.effffffffffffffffffffffffff8p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbe.ffffffffffffffp0)":
+Test "tgamma (-0xb.effffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.000000000000000000000000008p0)":
+Test "tgamma (-0xb.f000000000000000000000000008p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.0000000000000000000000004p0)":
+Test "tgamma (-0xb.f0000000000000000000000004p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xbf.00000000000001p0)":
+Test "tgamma (-0xb.f00000000000001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xf9.ffffffffffffffp0)":
+Test "tgamma (-0xb.f0001p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-0xfa.000000000000000000000000008p0)":
+Test "tgamma (-0xf.9fffffffffff8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.9ffffffffffffffp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-2.5)":
+Test "tgamma (-0xf.9ffffp+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a000000000000000000000000008p+4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (-0xf.a0000000000000000000000004p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a000000000008p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (-0xf.a0001p+4)":
+ildouble: 3
+ldouble: 3
+Test "tgamma (-0xf.ffffffffffff8p-4)":
double: 1
-float: 2
idouble: 1
-ifloat: 2
+Test "tgamma (-0xf.fffffffffffffffffffffffffff8p-4)":
ildouble: 1
ldouble: 1
-Test "tgamma (-3.5)":
-double: 1
+Test "tgamma (-0xf.fffffp-4)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "tgamma (-4.5)":
+Test "tgamma (0x1.28p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-5.5)":
-double: 1
-idouble: 1
-Test "tgamma (-6.5)":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (-7.5)":
+Test "tgamma (0x1.38p+4)":
double: 2
-float: 1
idouble: 2
-ifloat: 1
-Test "tgamma (-8.5)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x1.78p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (-9.5)":
+Test "tgamma (0x1.d8p+4)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "tgamma (0.5)":
+Test "tgamma (0x1.e8p+4)":
float: 1
ifloat: 1
-Test "tgamma (0.7)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "tgamma (0x1.fffffep0)":
+Test "tgamma (0x1.fffffep+0)":
float: 1
ifloat: 1
-Test "tgamma (0x1.fffffffffffffffep0)":
+Test "tgamma (0x1.fffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1.ffffffffffffffffffffffffffffp0)":
+Test "tgamma (0x1.ffffffffffffffffffffffffffffp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1.fffffffffffffp0)":
+Test "tgamma (0x1.fffffffffffffp+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x1p-113)":
+Test "tgamma (0x1p-24)":
+float: 1
+ifloat: 1
+Test "tgamma (0x2.08p+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x1p-24)":
+Test "tgamma (0x2.18p+4)":
float: 1
ifloat: 1
-Test "tgamma (0x1p-53)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x2.28p+4)":
double: 1
+float: 2
idouble: 1
+ifloat: 2
Test "tgamma (0x2.30a43cp+4)":
double: 1
float: 2
@@ -8921,503 +17326,556 @@ idouble: 1
ifloat: 2
ildouble: 2
ldouble: 2
-Test "tgamma (0x2.fffffcp0)":
+Test "tgamma (0x2.8p+0)":
+float: 2
+ifloat: 2
+Test "tgamma (0x2.fffffcp+0)":
float: 3
ifloat: 3
-Test "tgamma (0x2.ffffffffffffep0)":
+Test "tgamma (0x2.ffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.0000000000002p0)":
+Test "tgamma (0x3.0000000000002p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffcp0)":
+Test "tgamma (0x3.8p+0)":
+float: 2
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x3.fffffcp+0)":
float: 1
ifloat: 1
-Test "tgamma (0x3.ffffffffffffep0)":
+Test "tgamma (0x3.ffffffffffffep+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffffffffffffcp0)":
+Test "tgamma (0x3.fffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x3.fffffffffffffffffffffffffffep0)":
+Test "tgamma (0x3.fffffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.0000000000000000000000000004p0)":
+Test "tgamma (0x3p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x4.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.0000000000004p0)":
+Test "tgamma (0x4.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x4.000008p0)":
+Test "tgamma (0x4.000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.ffffffffffffcp0)":
+Test "tgamma (0x4.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x4.ffffffffffffcp+0)":
double: 1
idouble: 1
-Test "tgamma (0x4.fffffffffffffffffffffffffep0)":
+Test "tgamma (0x4.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x4.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (0x4.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.0000000000000000000000000004p0)":
+Test "tgamma (0x4p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x5.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.0000000000004p0)":
+Test "tgamma (0x5.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x5.000008p0)":
+Test "tgamma (0x5.000008p+0)":
float: 2
ifloat: 2
-Test "tgamma (0x5.fffff8p0)":
+Test "tgamma (0x5.fffff8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x5.ffffffffffffcp0)":
+Test "tgamma (0x5.ffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.fffffffffffffff8p0)":
+Test "tgamma (0x5.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x5.fffffffffffffffffffffffffep0)":
+Test "tgamma (0x5.fffffffffffffffffffffffffep+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000000000000000000004p0)":
+Test "tgamma (0x6.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000000008p0)":
+Test "tgamma (0x6.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.0000000000004p0)":
+Test "tgamma (0x6.0000000000004p+0)":
double: 1
idouble: 1
-Test "tgamma (0x6.000008p0)":
+Test "tgamma (0x6.000008p+0)":
float: 2
ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.fffff8p0)":
+Test "tgamma (0x6.8p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x6.db8c603359a94p+8)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0x6.fffff8p+0)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "tgamma (0x6.ffffffffffffcp0)":
+Test "tgamma (0x6.ffffffffffffcp+0)":
double: 4
idouble: 4
-Test "tgamma (0x6.fffffffffffffff8p0)":
+Test "tgamma (0x6.fffffffffffffff8p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000000000000000000004p0)":
+Test "tgamma (0x6p+0)":
+float: 1
+ifloat: 1
+Test "tgamma (0x7.0000000000000000000000000004p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000000008p0)":
+Test "tgamma (0x7.0000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.0000000000004p0)":
+Test "tgamma (0x7.0000000000004p+0)":
double: 4
idouble: 4
-Test "tgamma (0x7.000008p0)":
+Test "tgamma (0x7.000008p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (0x7.fffff8p0)":
+Test "tgamma (0x7.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (0x7.ffffffffffffcp0)":
+Test "tgamma (0x7.fffff8p+0)":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "tgamma (0x7.ffffffffffffcp+0)":
double: 2
idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (0x7.fffffffffffffffffffffffffffcp0)":
+Test "tgamma (0x7.fffffffffffffffffffffffffffcp+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.0000000000000000000000000008p0)":
+Test "tgamma (0x7p+0)":
+double: 1
+idouble: 1
+Test "tgamma (0x8.0000000000000000000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.0000000000008p0)":
+Test "tgamma (0x8.0000000000008p+0)":
ildouble: 1
ldouble: 1
-Test "tgamma (0x8.00001p0)":
+Test "tgamma (0x8.00001p+0)":
double: 2
idouble: 2
-Test "tgamma (0xa.b9fd72b0fb238p+4)":
+Test "tgamma (0x8.8p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0x8p+0)":
double: 1
idouble: 1
+Test "tgamma (0x8p-116)":
ildouble: 1
ldouble: 1
-Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)":
-ildouble: 2
-ldouble: 2
-Test "tgamma (10)":
-double: 1
+Test "tgamma (0x8p-4)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (18.5)":
+Test "tgamma (0x8p-56)":
+double: 1
+idouble: 1
+Test "tgamma (0x9.8p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (19.5)":
-double: 2
-idouble: 2
ildouble: 1
ldouble: 1
-Test "tgamma (2.5)":
-float: 2
-ifloat: 2
-Test "tgamma (23.5)":
+Test "tgamma (0x9p+0)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (29.5)":
+Test "tgamma (0xa.b9fd72b0fb238p+4)":
double: 1
-float: 1
idouble: 1
-ifloat: 1
-Test "tgamma (3)":
-float: 1
-ifloat: 1
-Test "tgamma (3.5)":
-float: 2
-ifloat: 2
ildouble: 1
ldouble: 1
-Test "tgamma (30.5)":
-float: 1
-ifloat: 1
-Test "tgamma (32.5)":
+Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)":
+ildouble: 2
+ldouble: 2
+Test "tgamma (0xa.b9fd72b0fb23a9dp+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (33.5)":
-float: 1
-ifloat: 1
+Test "tgamma (0xa.b9fd72b0fb23a9ep+4)":
ildouble: 1
ldouble: 1
-Test "tgamma (34.5)":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
-Test "tgamma (4)":
-float: 1
-ifloat: 1
-Test "tgamma (4.5)":
+Test "tgamma (0xa.b9fd7p+4)":
+double: 2
+idouble: 2
+Test "tgamma (0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "tgamma (6)":
-float: 1
-ifloat: 1
-Test "tgamma (6.5)":
+Test "tgamma (0xb.3333333333333333333333333338p-4)":
+ildouble: 1
+ldouble: 1
+Test "tgamma (0xb.3333333333338p-4)":
+ildouble: 1
+ldouble: 1
+
+# y0
+Test "y0 (0x1.8p+0)":
+double: 2
float: 1
+idouble: 2
ifloat: 1
-Test "tgamma (7)":
+Test "y0 (0x1.ff00000000002p+840)":
double: 1
idouble: 1
-Test "tgamma (7.5)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "tgamma (8)":
-double: 1
-idouble: 1
-Test "tgamma (8.5)":
-double: 1
+Test "y0 (0x1p-100)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x1p-20)":
float: 1
-idouble: 1
ifloat: 1
-Test "tgamma (9)":
-double: 1
-idouble: 1
-Test "tgamma (9.5)":
-double: 1
-idouble: 1
ildouble: 1
ldouble: 1
-
-# y0
-Test "y0 (0x1.3ffp+74)":
+Test "y0 (0x1p-40)":
double: 1
+float: 1
idouble: 1
+ifloat: 1
+Test "y0 (0x1p-60)":
ildouble: 1
ldouble: 1
-Test "y0 (0x1.ff00000000002p+840)":
+Test "y0 (0x1p-80)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x4.ffcp+72)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-10)":
+Test "y0 (0x4p+16380)":
+ildouble: 1
+ldouble: 1
+Test "y0 (0x4p-112)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-110)":
+Test "y0 (0x4p-12)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y0 (0x1p-20)":
-float: 1
-ifloat: 1
-Test "y0 (0x1p-30)":
+Test "y0 (0x4p-32)":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
-Test "y0 (0x1p-40)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-Test "y0 (0x1p-50)":
+Test "y0 (0x4p-52)":
float: 1
ifloat: 1
-Test "y0 (0x1p-60)":
-ildouble: 1
-ldouble: 1
-Test "y0 (0x1p-70)":
+Test "y0 (0x4p-72)":
double: 1
idouble: 1
-Test "y0 (0x1p-80)":
+Test "y0 (0x8p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-Test "y0 (0x1p1023)":
-ildouble: 1
-ldouble: 1
-Test "y0 (0x1p16382)":
+ildouble: 3
+ldouble: 3
+Test "y0 (0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "y0 (0x1p16383)":
+Test "y0 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "y0 (1.0)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (1.5)":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
-Test "y0 (10.0)":
+Test "y0 (0xap+0)":
float: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "y0 (8.0)":
+Test "y0 (0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+Test "y0 (0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 3
-ldouble: 3
# y1
-Test "y1 (0.125)":
-double: 1
-idouble: 1
-Test "y1 (0.75)":
+Test "y1 (0x1.8p+0)":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
-Test "y1 (0x1.001000001p+593)":
+Test "y1 (0x1p-100)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1.27e204p+99)":
+Test "y1 (0x1p-20)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x1p-80)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x2.002000002p+592)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x2p+0)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "y1 (0x2p-4)":
double: 1
idouble: 1
-Test "y1 (0x1p-10)":
+Test "y1 (0x4p-112)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x4p-12)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
-Test "y1 (0x1p-30)":
+Test "y1 (0x4p-32)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1p1023)":
+Test "y1 (0x4p-72)":
ildouble: 1
ldouble: 1
-Test "y1 (0x1p16383)":
+Test "y1 (0x4p-92)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+0)":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+1020)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "y1 (1.5)":
-float: 1
-ifloat: 1
+Test "y1 (0x9.3f102p+96)":
+double: 1
+idouble: 1
ildouble: 1
ldouble: 1
-Test "y1 (10.0)":
+Test "y1 (0xap+0)":
double: 3
float: 1
idouble: 3
ifloat: 1
-Test "y1 (2.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+Test "y1 (0xf.ffffffffffff8p+1020)":
ildouble: 1
ldouble: 1
-Test "y1 (8.0)":
+Test "y1 (0xf.ffffffffffffbffffffffffffcp+1020)":
+ildouble: 1
+ldouble: 1
+Test "y1 (0xf.fffffp+124)":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+# yn
+Test "yn (-10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-
-# yn
-Test "yn (0, 1.0)":
+Test "yn (0, 0x1.8p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 1.5)":
+Test "yn (0, 0x1p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
-Test "yn (0, 10.0)":
+Test "yn (0, 0x8p+0)":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "yn (0, 8.0)":
-double: 1
+Test "yn (0, 0xap+0)":
float: 1
-idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
-Test "yn (1, 0.125)":
-double: 1
-idouble: 1
-Test "yn (1, 0.75)":
-ildouble: 1
-ldouble: 1
-Test "yn (1, 1.5)":
+Test "yn (1, 0x1.8p+0)":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (1, 10.0)":
-double: 3
-float: 1
-idouble: 3
-ifloat: 1
-Test "yn (1, 2.0)":
+Test "yn (1, 0x2p+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
-Test "yn (1, 8.0)":
+ildouble: 2
+ldouble: 2
+Test "yn (1, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (1, 0x8p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-Test "yn (10, 0.125)":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 0.75)":
-double: 1
+Test "yn (1, 0xap+0)":
+double: 3
float: 1
-idouble: 1
+idouble: 3
ifloat: 1
-ildouble: 5
-ldouble: 5
-Test "yn (10, 1.0)":
+Test "yn (10, 0x1p+0)":
double: 1
float: 2
idouble: 1
ifloat: 2
ildouble: 1
ldouble: 1
-Test "yn (10, 10.0)":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (10, 2.0)":
+Test "yn (10, 0x2p+0)":
double: 2
float: 1
idouble: 2
ifloat: 1
ildouble: 2
ldouble: 2
-Test "yn (2, 0x1.ffff62p+99)":
+Test "yn (10, 0x2p-4)":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+Test "yn (10, 0xap+0)":
double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 3
+ldouble: 3
+Test "yn (10, 0xcp-4)":
+double: 1
+float: 1
idouble: 1
-Test "yn (2, 0x1p1023)":
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "yn (2, 0x8p+1020)":
ildouble: 1
ldouble: 1
-Test "yn (2, 0x1p127)":
+Test "yn (2, 0x8p+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (2, 0x1p16383)":
+Test "yn (2, 0x8p+16380)":
ildouble: 2
ldouble: 2
-Test "yn (3, 0.125)":
+Test "yn (2, 0xf.fffb1p+96)":
double: 1
idouble: 1
-Test "yn (3, 0.75)":
+ildouble: 1
+ldouble: 1
+Test "yn (2, 0xf.ffffffffffff8p+1020)":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "yn (2, 0xf.fffffp+124)":
double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
-Test "yn (3, 10.0)":
+Test "yn (3, 0x2p+0)":
+double: 1
+idouble: 1
+Test "yn (3, 0x2p-4)":
+double: 1
+idouble: 1
+Test "yn (3, 0xap+0)":
double: 1
float: 1
idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Test "yn (3, 2.0)":
+Test "yn (3, 0xcp-4)":
double: 1
idouble: 1
+ildouble: 2
+ldouble: 2
# Maximal error of functions:
Function: "acos_downward":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "acos_towardzero":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "acos_upward":
+double: 1
+idouble: 1
+
+Function: "acosh":
+double: 1
+idouble: 1
+ldouble: 1
+
+Function: "asin":
ildouble: 1
ldouble: 1
@@ -9429,13 +17887,28 @@ ifloat: 1
ildouble: 1
ldouble: 1
+Function: "asin_tonearest":
+ildouble: 1
+ldouble: 1
+
Function: "asin_towardzero":
double: 1
float: 1
idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: "asin_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "asinh":
+double: 1
float: 1
ifloat: 1
ildouble: 1
@@ -9450,6 +17923,8 @@ ldouble: 1
Function: "atanh":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: Real part of "cacos":
double: 1
@@ -9545,7 +18020,9 @@ ldouble: 1
Function: "cbrt":
double: 1
+float: 1
idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -9628,54 +18105,80 @@ ildouble: 2
ldouble: 2
Function: "cos":
-double: 2
float: 1
-idouble: 2
ifloat: 1
ildouble: 1
ldouble: 1
Function: "cos_downward":
-float: 1
-ifloat: 1
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 2
ldouble: 2
Function: "cos_tonearest":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Function: "cos_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 1
+ldouble: 1
Function: "cos_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
+ildouble: 2
+ldouble: 2
+
+Function: "cosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "cosh_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
-ldouble: 1
+ldouble: 2
Function: "cosh_tonearest":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "cosh_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
-ldouble: 1
+ldouble: 2
Function: "cosh_upward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
ildouble: 1
-ldouble: 1
+ldouble: 3
Function: Real part of "cpow":
double: 2
@@ -9738,142 +18241,166 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctan":
-double: 1
-idouble: 1
-ildouble: 2
-ldouble: 2
-
-Function: Real part of "ctan_downward":
double: 2
float: 1
idouble: 2
ifloat: 1
+ildouble: 3
+ldouble: 3
+
+Function: Real part of "ctan_downward":
+double: 6
+float: 5
+idouble: 6
+ifloat: 5
ildouble: 4
ldouble: 4
Function: Imaginary part of "ctan_downward":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 5
ldouble: 5
Function: Real part of "ctan_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctan_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 3
ldouble: 3
Function: Real part of "ctan_towardzero":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 4
+ldouble: 4
Function: Imaginary part of "ctan_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 5
ldouble: 5
Function: Real part of "ctan_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
Function: Imaginary part of "ctan_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 3
ldouble: 3
Function: Real part of "ctanh":
-double: 1
+double: 2
float: 1
-idouble: 1
+idouble: 2
ifloat: 1
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Imaginary part of "ctanh":
-double: 1
+double: 2
float: 2
-idouble: 1
+idouble: 2
ifloat: 2
-ildouble: 2
-ldouble: 2
+ildouble: 3
+ldouble: 3
Function: Real part of "ctanh_downward":
+double: 4
float: 1
+idouble: 4
ifloat: 1
ildouble: 5
ldouble: 5
Function: Imaginary part of "ctanh_downward":
-double: 2
-float: 1
-idouble: 2
-ifloat: 1
+double: 6
+float: 5
+idouble: 6
+ifloat: 5
ildouble: 4
ldouble: 4
Function: Real part of "ctanh_tonearest":
+double: 2
float: 1
+idouble: 2
ifloat: 1
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctanh_tonearest":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 3
ldouble: 3
Function: Real part of "ctanh_towardzero":
-float: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
ildouble: 5
ldouble: 5
Function: Imaginary part of "ctanh_towardzero":
-float: 1
-ifloat: 1
-ildouble: 1
-ldouble: 1
+double: 5
+float: 3
+idouble: 5
+ifloat: 3
+ildouble: 3
+ldouble: 3
Function: Real part of "ctanh_upward":
-double: 1
-float: 2
-idouble: 1
-ifloat: 2
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
ildouble: 3
ldouble: 3
Function: Imaginary part of "ctanh_upward":
double: 2
-float: 1
+float: 3
idouble: 2
-ifloat: 1
-ildouble: 2
-ldouble: 2
+ifloat: 3
+ildouble: 5
+ldouble: 5
Function: "erf":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Function: "erfc":
double: 1
@@ -9889,29 +18416,75 @@ idouble: 1
ildouble: 1
ldouble: 1
+Function: "exp10_downward":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp10_tonearest":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: "exp10_towardzero":
+double: 1
+idouble: 1
+ildouble: 2
+ldouble: 2
+
+Function: "exp10_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
Function: "exp2":
ildouble: 1
ldouble: 1
Function: "exp_downward":
+double: 1
+idouble: 1
+
+Function: "exp_towardzero":
+double: 1
+idouble: 1
+
+Function: "exp_upward":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
+Function: "expm1":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp_towardzero":
+Function: "expm1_downward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "exp_upward":
+Function: "expm1_tonearest":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
-Function: "expm1":
+Function: "expm1_towardzero":
double: 1
float: 1
idouble: 1
@@ -9919,17 +18492,27 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "gamma":
+Function: "expm1_upward":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
ildouble: 1
ldouble: 1
-Function: "hypot":
+Function: "gamma":
+double: 1
float: 1
+idouble: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "hypot":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "j0":
double: 2
@@ -9949,17 +18532,23 @@ ldouble: 4
Function: "jn":
double: 4
-float: 5
+float: 4
idouble: 4
-ifloat: 5
-ildouble: 8
-ldouble: 8
+ifloat: 4
+ildouble: 7
+ldouble: 7
Function: "lgamma":
double: 1
-float: 2
+float: 1
idouble: 1
-ifloat: 2
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "log":
+float: 1
+ifloat: 1
ildouble: 1
ldouble: 1
@@ -9997,6 +18586,12 @@ Function: "pow_downward":
float: 1
ifloat: 1
+Function: "pow_tonearest":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "pow_towardzero":
float: 1
ifloat: 1
@@ -10007,12 +18602,20 @@ ifloat: 1
ildouble: 1
ldouble: 1
-Function: "sin_downward":
+Function: "sin":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Function: "sin_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
+
Function: "sin_tonearest":
float: 1
ifloat: 1
@@ -10020,62 +18623,78 @@ ildouble: 1
ldouble: 1
Function: "sin_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "sin_upward":
+double: 1
float: 2
+idouble: 1
ifloat: 2
-ildouble: 1
-ldouble: 1
+ildouble: 3
+ldouble: 3
Function: "sincos":
-double: 1
float: 1
-idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "sinh_downward":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "sinh_towardzero":
-float: 1
-ifloat: 1
-ildouble: 2
-ldouble: 2
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
Function: "sinh_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
ildouble: 1
ldouble: 1
Function: "tan":
+ildouble: 1
+ldouble: 1
+
+Function: "tan_downward":
double: 1
+float: 2
idouble: 1
+ifloat: 2
+ildouble: 1
+ldouble: 1
-Function: "tan_downward":
-float: 1
-ifloat: 1
+Function: "tan_tonearest":
ildouble: 1
ldouble: 1
Function: "tan_towardzero":
+double: 1
float: 1
+idouble: 1
ifloat: 1
ildouble: 1
ldouble: 1
Function: "tan_upward":
+double: 1
float: 1
+idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Function: "tanh":
ildouble: 1
@@ -10110,7 +18729,7 @@ double: 3
float: 2
idouble: 3
ifloat: 2
-ildouble: 5
-ldouble: 5
+ildouble: 4
+ldouble: 4
# end of automatic generation
diff --git a/libc/sysdeps/unix/sysv/linux/dl-sysdep.c b/libc/sysdeps/unix/sysv/linux/dl-sysdep.c
index 676c9b246..28100742f 100644
--- a/libc/sysdeps/unix/sysv/linux/dl-sysdep.c
+++ b/libc/sysdeps/unix/sysv/linux/dl-sysdep.c
@@ -19,7 +19,6 @@
/* Linux needs some special initialization, but otherwise uses
the generic dynamic linker system interface code. */
-#include <assert.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
@@ -131,48 +130,3 @@ _dl_discover_osversion (void)
return version;
}
-
-/* Mask every signal, returning the previous sigmask in OLD. */
-void
-internal_function
-_dl_mask_all_signals (sigset_t *old)
-{
- int ret;
- sigset_t new;
-
- sigfillset (&new);
-
- /* This function serves as a replacement to pthread_sigmask, which
- isn't available from within the dynamic linker since it would require
- linking with libpthread. We duplicate some of the functionality here
- to avoid requiring libpthread. This isn't quite identical to
- pthread_sigmask in that we do not mask internal signals used for
- cancellation and setxid handling. This disables asynchronous
- cancellation for the duration the signals are disabled, but it's a
- small window, and prevents any problems with the use of TLS variables
- in the signal handlers that would have executed. */
-
- /* It's very important we don't touch errno here, as that's TLS; since this
- gets called from get_tls_addr we might end up recursing. */
-
- INTERNAL_SYSCALL_DECL (err);
-
- ret = INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &new, old,
- _NSIG / 8);
-
- assert (ret == 0);
-}
-
-/* Return sigmask to what it was before a call to _dl_mask_all_signals. */
-void
-internal_function
-_dl_unmask_signals (sigset_t *old)
-{
- int ret;
- INTERNAL_SYSCALL_DECL (err);
-
- ret = INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, old, NULL,
- _NSIG / 8);
-
- assert (ret == 0);
-}
diff --git a/libc/sysdeps/unix/sysv/linux/dl-sysdep.h b/libc/sysdeps/unix/sysv/linux/dl-sysdep.h
index 8e39c8321..096019f2a 100644
--- a/libc/sysdeps/unix/sysv/linux/dl-sysdep.h
+++ b/libc/sysdeps/unix/sysv/linux/dl-sysdep.h
@@ -30,8 +30,4 @@
/* Get version of the OS. */
extern int _dl_discover_osversion (void) attribute_hidden;
# define HAVE_DL_DISCOVER_OSVERSION 1
-
-#include <signal.h>
-void _dl_mask_all_signals (sigset_t *) internal_function;
-void _dl_unmask_all_signals (sigset_t *) internal_function;
#endif
diff --git a/libc/sysdeps/unix/sysv/linux/kernel-features.h b/libc/sysdeps/unix/sysv/linux/kernel-features.h
index 372353528..784f4dd49 100644
--- a/libc/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/libc/sysdeps/unix/sysv/linux/kernel-features.h
@@ -202,6 +202,12 @@
# define __ASSUME_RECVMMSG 1
#endif
+/* Support for /proc/self/task/$tid/comm and /proc/$pid/task/$tid/comm was
+ added in 2.6.33. */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_PROC_PID_TASK_COMM 1
+#endif
+
/* statfs fills in f_flags since 2.6.36. */
#if __LINUX_KERNEL_VERSION >= 0x020624
# define __ASSUME_STATFS_F_FLAGS 1
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist
new file mode 100644
index 000000000..3530fb487
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist
@@ -0,0 +1,11 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ __libc_memalign F
+ __libc_stack_end D 0x8
+ __tls_get_addr F
+ _dl_mcount F
+ _r_debug D 0x28
+ calloc F
+ free F
+ malloc F
+ realloc F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist
new file mode 100644
index 000000000..92c43d9b7
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist
@@ -0,0 +1,3 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ __ctype_get_mb_cur_max F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist
new file mode 100644
index 000000000..0d32f2ed4
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ gai_cancel F
+ gai_error F
+ gai_suspend F
+ getaddrinfo_a F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist
new file mode 100644
index 000000000..20eac4e85
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist
@@ -0,0 +1,2171 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ _Exit F
+ _IO_2_1_stderr_ D 0xe0
+ _IO_2_1_stdin_ D 0xe0
+ _IO_2_1_stdout_ D 0xe0
+ _IO_adjust_column F
+ _IO_adjust_wcolumn F
+ _IO_default_doallocate F
+ _IO_default_finish F
+ _IO_default_pbackfail F
+ _IO_default_uflow F
+ _IO_default_xsgetn F
+ _IO_default_xsputn F
+ _IO_do_write F
+ _IO_doallocbuf F
+ _IO_fclose F
+ _IO_fdopen F
+ _IO_feof F
+ _IO_ferror F
+ _IO_fflush F
+ _IO_fgetpos F
+ _IO_fgetpos64 F
+ _IO_fgets F
+ _IO_file_attach F
+ _IO_file_close F
+ _IO_file_close_it F
+ _IO_file_doallocate F
+ _IO_file_finish F
+ _IO_file_fopen F
+ _IO_file_init F
+ _IO_file_jumps D 0xa8
+ _IO_file_open F
+ _IO_file_overflow F
+ _IO_file_read F
+ _IO_file_seek F
+ _IO_file_seekoff F
+ _IO_file_setbuf F
+ _IO_file_stat F
+ _IO_file_sync F
+ _IO_file_underflow F
+ _IO_file_write F
+ _IO_file_xsputn F
+ _IO_flockfile F
+ _IO_flush_all F
+ _IO_flush_all_linebuffered F
+ _IO_fopen F
+ _IO_fprintf F
+ _IO_fputs F
+ _IO_fread F
+ _IO_free_backup_area F
+ _IO_free_wbackup_area F
+ _IO_fsetpos F
+ _IO_fsetpos64 F
+ _IO_ftell F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ _IO_fwrite F
+ _IO_getc F
+ _IO_getline F
+ _IO_getline_info F
+ _IO_gets F
+ _IO_init F
+ _IO_init_marker F
+ _IO_init_wmarker F
+ _IO_iter_begin F
+ _IO_iter_end F
+ _IO_iter_file F
+ _IO_iter_next F
+ _IO_least_wmarker F
+ _IO_link_in F
+ _IO_list_all D 0x8
+ _IO_list_lock F
+ _IO_list_resetlock F
+ _IO_list_unlock F
+ _IO_marker_delta F
+ _IO_marker_difference F
+ _IO_padn F
+ _IO_peekc_locked F
+ _IO_popen F
+ _IO_printf F
+ _IO_proc_close F
+ _IO_proc_open F
+ _IO_putc F
+ _IO_puts F
+ _IO_remove_marker F
+ _IO_seekmark F
+ _IO_seekoff F
+ _IO_seekpos F
+ _IO_seekwmark F
+ _IO_setb F
+ _IO_setbuffer F
+ _IO_setvbuf F
+ _IO_sgetn F
+ _IO_sprintf F
+ _IO_sputbackc F
+ _IO_sputbackwc F
+ _IO_sscanf F
+ _IO_str_init_readonly F
+ _IO_str_init_static F
+ _IO_str_overflow F
+ _IO_str_pbackfail F
+ _IO_str_seekoff F
+ _IO_str_underflow F
+ _IO_sungetc F
+ _IO_sungetwc F
+ _IO_switch_to_get_mode F
+ _IO_switch_to_main_wget_area F
+ _IO_switch_to_wbackup_area F
+ _IO_switch_to_wget_mode F
+ _IO_un_link F
+ _IO_ungetc F
+ _IO_unsave_markers F
+ _IO_unsave_wmarkers F
+ _IO_vfprintf F
+ _IO_vfscanf F
+ _IO_vsprintf F
+ _IO_wdefault_doallocate F
+ _IO_wdefault_finish F
+ _IO_wdefault_pbackfail F
+ _IO_wdefault_uflow F
+ _IO_wdefault_xsgetn F
+ _IO_wdefault_xsputn F
+ _IO_wdo_write F
+ _IO_wdoallocbuf F
+ _IO_wfile_jumps D 0xa8
+ _IO_wfile_overflow F
+ _IO_wfile_seekoff F
+ _IO_wfile_sync F
+ _IO_wfile_underflow F
+ _IO_wfile_xsputn F
+ _IO_wmarker_delta F
+ _IO_wsetb F
+ __adjtimex F
+ __after_morecore_hook D 0x8
+ __argz_count F
+ __argz_next F
+ __argz_stringify F
+ __asprintf F
+ __asprintf_chk F
+ __assert F
+ __assert_fail F
+ __assert_perror_fail F
+ __backtrace F
+ __backtrace_symbols F
+ __backtrace_symbols_fd F
+ __bsd_getpgrp F
+ __bzero F
+ __check_rhosts_file D 0x4
+ __chk_fail F
+ __clone F
+ __close F
+ __cmsg_nxthdr F
+ __confstr_chk F
+ __connect F
+ __ctype_b_loc F
+ __ctype_get_mb_cur_max F
+ __ctype_tolower_loc F
+ __ctype_toupper_loc F
+ __curbrk D 0x8
+ __cxa_at_quick_exit F
+ __cxa_atexit F
+ __cxa_finalize F
+ __cyg_profile_func_enter F
+ __cyg_profile_func_exit F
+ __daylight D 0x4
+ __dcgettext F
+ __default_morecore F
+ __dgettext F
+ __dprintf_chk F
+ __dup2 F
+ __duplocale F
+ __endmntent F
+ __environ D 0x8
+ __errno_location F
+ __fbufsize F
+ __fcntl F
+ __fdelt_chk F
+ __fdelt_warn F
+ __ffs F
+ __fgets_chk F
+ __fgets_unlocked_chk F
+ __fgetws_chk F
+ __fgetws_unlocked_chk F
+ __finite F
+ __finitef F
+ __finitel F
+ __flbf F
+ __fork F
+ __fpending F
+ __fprintf_chk F
+ __fpu_control D 0x4
+ __fpurge F
+ __fread_chk F
+ __fread_unlocked_chk F
+ __freadable F
+ __freading F
+ __free_hook D 0x8
+ __freelocale F
+ __fsetlocking F
+ __fwprintf_chk F
+ __fwritable F
+ __fwriting F
+ __fxstat F
+ __fxstat64 F
+ __fxstatat F
+ __fxstatat64 F
+ __getauxval F
+ __getcwd_chk F
+ __getdelim F
+ __getdomainname_chk F
+ __getgroups_chk F
+ __gethostname_chk F
+ __getlogin_r_chk F
+ __getmntent_r F
+ __getpagesize F
+ __getpgid F
+ __getpid F
+ __gets_chk F
+ __gettimeofday F
+ __getwd_chk F
+ __gmtime_r F
+ __h_errno_location F
+ __isalnum_l F
+ __isalpha_l F
+ __isascii_l F
+ __isblank_l F
+ __iscntrl_l F
+ __isctype F
+ __isdigit_l F
+ __isgraph_l F
+ __isinf F
+ __isinff F
+ __isinfl F
+ __islower_l F
+ __isnan F
+ __isnanf F
+ __isnanl F
+ __isoc99_fscanf F
+ __isoc99_fwscanf F
+ __isoc99_scanf F
+ __isoc99_sscanf F
+ __isoc99_swscanf F
+ __isoc99_vfscanf F
+ __isoc99_vfwscanf F
+ __isoc99_vscanf F
+ __isoc99_vsscanf F
+ __isoc99_vswscanf F
+ __isoc99_vwscanf F
+ __isoc99_wscanf F
+ __isprint_l F
+ __ispunct_l F
+ __isspace_l F
+ __isupper_l F
+ __iswalnum_l F
+ __iswalpha_l F
+ __iswblank_l F
+ __iswcntrl_l F
+ __iswctype F
+ __iswctype_l F
+ __iswdigit_l F
+ __iswgraph_l F
+ __iswlower_l F
+ __iswprint_l F
+ __iswpunct_l F
+ __iswspace_l F
+ __iswupper_l F
+ __iswxdigit_l F
+ __isxdigit_l F
+ __ivaliduser F
+ __key_decryptsession_pk_LOCAL D 0x8
+ __key_encryptsession_pk_LOCAL D 0x8
+ __key_gendes_LOCAL D 0x8
+ __libc_allocate_rtsig F
+ __libc_calloc F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __libc_free F
+ __libc_freeres F
+ __libc_init_first F
+ __libc_mallinfo F
+ __libc_malloc F
+ __libc_mallopt F
+ __libc_memalign F
+ __libc_pvalloc F
+ __libc_realloc F
+ __libc_sa_len F
+ __libc_start_main F
+ __libc_valloc F
+ __longjmp_chk F
+ __lseek F
+ __lxstat F
+ __lxstat64 F
+ __malloc_hook D 0x8
+ __malloc_initialize_hook D 0x8
+ __mbrlen F
+ __mbrtowc F
+ __mbsnrtowcs_chk F
+ __mbsrtowcs_chk F
+ __mbstowcs_chk F
+ __memalign_hook D 0x8
+ __memcpy_chk F
+ __memmove_chk F
+ __mempcpy F
+ __mempcpy_chk F
+ __mempcpy_small F
+ __memset_chk F
+ __monstartup F
+ __morecore D 0x8
+ __nanosleep F
+ __newlocale F
+ __nl_langinfo_l F
+ __nldbl__IO_fprintf F
+ __nldbl__IO_printf F
+ __nldbl__IO_sprintf F
+ __nldbl__IO_sscanf F
+ __nldbl__IO_vfprintf F
+ __nldbl__IO_vfscanf F
+ __nldbl__IO_vsprintf F
+ __nldbl___asprintf F
+ __nldbl___asprintf_chk F
+ __nldbl___dprintf_chk F
+ __nldbl___fprintf_chk F
+ __nldbl___fwprintf_chk F
+ __nldbl___isoc99_fscanf F
+ __nldbl___isoc99_fwscanf F
+ __nldbl___isoc99_scanf F
+ __nldbl___isoc99_sscanf F
+ __nldbl___isoc99_swscanf F
+ __nldbl___isoc99_vfscanf F
+ __nldbl___isoc99_vfwscanf F
+ __nldbl___isoc99_vscanf F
+ __nldbl___isoc99_vsscanf F
+ __nldbl___isoc99_vswscanf F
+ __nldbl___isoc99_vwscanf F
+ __nldbl___isoc99_wscanf F
+ __nldbl___obstack_printf_chk F
+ __nldbl___obstack_vprintf_chk F
+ __nldbl___printf_chk F
+ __nldbl___printf_fp F
+ __nldbl___snprintf_chk F
+ __nldbl___sprintf_chk F
+ __nldbl___strfmon_l F
+ __nldbl___swprintf_chk F
+ __nldbl___syslog_chk F
+ __nldbl___vasprintf_chk F
+ __nldbl___vdprintf_chk F
+ __nldbl___vfprintf_chk F
+ __nldbl___vfscanf F
+ __nldbl___vfwprintf_chk F
+ __nldbl___vprintf_chk F
+ __nldbl___vsnprintf F
+ __nldbl___vsnprintf_chk F
+ __nldbl___vsprintf_chk F
+ __nldbl___vsscanf F
+ __nldbl___vstrfmon F
+ __nldbl___vstrfmon_l F
+ __nldbl___vswprintf_chk F
+ __nldbl___vsyslog_chk F
+ __nldbl___vwprintf_chk F
+ __nldbl___wprintf_chk F
+ __nldbl_asprintf F
+ __nldbl_dprintf F
+ __nldbl_fprintf F
+ __nldbl_fscanf F
+ __nldbl_fwprintf F
+ __nldbl_fwscanf F
+ __nldbl_obstack_printf F
+ __nldbl_obstack_vprintf F
+ __nldbl_printf F
+ __nldbl_printf_size F
+ __nldbl_scanf F
+ __nldbl_snprintf F
+ __nldbl_sprintf F
+ __nldbl_sscanf F
+ __nldbl_strfmon F
+ __nldbl_strfmon_l F
+ __nldbl_swprintf F
+ __nldbl_swscanf F
+ __nldbl_syslog F
+ __nldbl_vasprintf F
+ __nldbl_vdprintf F
+ __nldbl_vfprintf F
+ __nldbl_vfscanf F
+ __nldbl_vfwprintf F
+ __nldbl_vfwscanf F
+ __nldbl_vprintf F
+ __nldbl_vscanf F
+ __nldbl_vsnprintf F
+ __nldbl_vsprintf F
+ __nldbl_vsscanf F
+ __nldbl_vswprintf F
+ __nldbl_vswscanf F
+ __nldbl_vsyslog F
+ __nldbl_vwprintf F
+ __nldbl_vwscanf F
+ __nldbl_wprintf F
+ __nldbl_wscanf F
+ __nss_configure_lookup F
+ __nss_database_lookup F
+ __nss_group_lookup F
+ __nss_hostname_digits_dots F
+ __nss_hosts_lookup F
+ __nss_next F
+ __nss_passwd_lookup F
+ __obstack_printf_chk F
+ __obstack_vprintf_chk F
+ __open F
+ __open64 F
+ __open64_2 F
+ __open_2 F
+ __openat64_2 F
+ __openat_2 F
+ __overflow F
+ __pipe F
+ __poll F
+ __poll_chk F
+ __posix_getopt F
+ __ppc_get_timebase_freq F
+ __ppoll_chk F
+ __pread64 F
+ __pread64_chk F
+ __pread_chk F
+ __printf_chk F
+ __printf_fp F
+ __profile_frequency F
+ __progname D 0x8
+ __progname_full D 0x8
+ __ptsname_r_chk F
+ __pwrite64 F
+ __rawmemchr F
+ __rcmd_errstr D 0x8
+ __read F
+ __read_chk F
+ __readlink_chk F
+ __readlinkat_chk F
+ __realloc_hook D 0x8
+ __realpath_chk F
+ __recv_chk F
+ __recvfrom_chk F
+ __register_atfork F
+ __res_init F
+ __res_nclose F
+ __res_ninit F
+ __res_randomid F
+ __res_state F
+ __rpc_thread_createerr F
+ __rpc_thread_svc_fdset F
+ __rpc_thread_svc_max_pollfd F
+ __rpc_thread_svc_pollfd F
+ __sbrk F
+ __sched_cpualloc F
+ __sched_cpucount F
+ __sched_cpufree F
+ __sched_get_priority_max F
+ __sched_get_priority_min F
+ __sched_getparam F
+ __sched_getscheduler F
+ __sched_setscheduler F
+ __sched_yield F
+ __select F
+ __send F
+ __setmntent F
+ __setpgid F
+ __sigaction F
+ __sigaddset F
+ __sigdelset F
+ __sigismember F
+ __signbit F
+ __signbitf F
+ __signbitl F
+ __sigpause F
+ __sigsetjmp F
+ __sigsuspend F
+ __snprintf_chk F
+ __sprintf_chk F
+ __stack_chk_fail F
+ __statfs F
+ __stpcpy F
+ __stpcpy_chk F
+ __stpcpy_small F
+ __stpncpy F
+ __stpncpy_chk F
+ __strcasecmp F
+ __strcasecmp_l F
+ __strcasestr F
+ __strcat_chk F
+ __strcoll_l F
+ __strcpy_chk F
+ __strcpy_small F
+ __strcspn_c1 F
+ __strcspn_c2 F
+ __strcspn_c3 F
+ __strdup F
+ __strerror_r F
+ __strfmon_l F
+ __strftime_l F
+ __strncasecmp_l F
+ __strncat_chk F
+ __strncpy_chk F
+ __strndup F
+ __strpbrk_c2 F
+ __strpbrk_c3 F
+ __strsep_1c F
+ __strsep_2c F
+ __strsep_3c F
+ __strsep_g F
+ __strspn_c1 F
+ __strspn_c2 F
+ __strspn_c3 F
+ __strtod_internal F
+ __strtod_l F
+ __strtof_internal F
+ __strtof_l F
+ __strtok_r F
+ __strtok_r_1c F
+ __strtol_internal F
+ __strtol_l F
+ __strtold_internal F
+ __strtold_l F
+ __strtoll_internal F
+ __strtoll_l F
+ __strtoul_internal F
+ __strtoul_l F
+ __strtoull_internal F
+ __strtoull_l F
+ __strverscmp F
+ __strxfrm_l F
+ __swprintf_chk F
+ __sysconf F
+ __sysctl F
+ __syslog_chk F
+ __sysv_signal F
+ __timezone D 0x8
+ __toascii_l F
+ __tolower_l F
+ __toupper_l F
+ __towctrans F
+ __towctrans_l F
+ __towlower_l F
+ __towupper_l F
+ __ttyname_r_chk F
+ __tzname D 0x10
+ __uflow F
+ __underflow F
+ __uselocale F
+ __vasprintf_chk F
+ __vdprintf_chk F
+ __vfork F
+ __vfprintf_chk F
+ __vfscanf F
+ __vfwprintf_chk F
+ __vprintf_chk F
+ __vsnprintf F
+ __vsnprintf_chk F
+ __vsprintf_chk F
+ __vsscanf F
+ __vswprintf_chk F
+ __vsyslog_chk F
+ __vwprintf_chk F
+ __wait F
+ __waitpid F
+ __wcpcpy_chk F
+ __wcpncpy_chk F
+ __wcrtomb_chk F
+ __wcscasecmp_l F
+ __wcscat_chk F
+ __wcscoll_l F
+ __wcscpy_chk F
+ __wcsftime_l F
+ __wcsncasecmp_l F
+ __wcsncat_chk F
+ __wcsncpy_chk F
+ __wcsnrtombs_chk F
+ __wcsrtombs_chk F
+ __wcstod_internal F
+ __wcstod_l F
+ __wcstof_internal F
+ __wcstof_l F
+ __wcstol_internal F
+ __wcstol_l F
+ __wcstold_internal F
+ __wcstold_l F
+ __wcstoll_internal F
+ __wcstoll_l F
+ __wcstombs_chk F
+ __wcstoul_internal F
+ __wcstoul_l F
+ __wcstoull_internal F
+ __wcstoull_l F
+ __wcsxfrm_l F
+ __wctomb_chk F
+ __wctrans_l F
+ __wctype_l F
+ __wmemcpy_chk F
+ __wmemmove_chk F
+ __wmempcpy_chk F
+ __wmemset_chk F
+ __woverflow F
+ __wprintf_chk F
+ __write F
+ __wuflow F
+ __wunderflow F
+ __xmknod F
+ __xmknodat F
+ __xpg_basename F
+ __xpg_sigpause F
+ __xpg_strerror_r F
+ __xstat F
+ __xstat64 F
+ _authenticate F
+ _dl_mcount_wrapper F
+ _dl_mcount_wrapper_check F
+ _environ D 0x8
+ _exit F
+ _flushlbf F
+ _libc_intl_domainname D 0x5
+ _longjmp F
+ _mcleanup F
+ _mcount F
+ _nl_default_dirname D 0x12
+ _nl_domain_bindings D 0x8
+ _nl_msg_cat_cntr D 0x4
+ _null_auth D 0x18
+ _obstack_allocated_p F
+ _obstack_begin F
+ _obstack_begin_1 F
+ _obstack_free F
+ _obstack_memory_used F
+ _obstack_newchunk F
+ _res D 0x238
+ _res_hconf D 0x48
+ _rpc_dtablesize F
+ _seterr_reply F
+ _setjmp F
+ _sys_errlist D 0x438
+ _sys_nerr D 0x4
+ _sys_siglist D 0x208
+ _tolower F
+ _toupper F
+ a64l F
+ abort F
+ abs F
+ accept F
+ accept4 F
+ access F
+ acct F
+ addmntent F
+ addseverity F
+ adjtime F
+ adjtimex F
+ advance F
+ alarm F
+ aligned_alloc F
+ alphasort F
+ alphasort64 F
+ argp_err_exit_status D 0x4
+ argp_error F
+ argp_failure F
+ argp_help F
+ argp_parse F
+ argp_program_bug_address D 0x8
+ argp_program_version D 0x8
+ argp_program_version_hook D 0x8
+ argp_state_help F
+ argp_usage F
+ argz_add F
+ argz_add_sep F
+ argz_append F
+ argz_count F
+ argz_create F
+ argz_create_sep F
+ argz_delete F
+ argz_extract F
+ argz_insert F
+ argz_next F
+ argz_replace F
+ argz_stringify F
+ asctime F
+ asctime_r F
+ asprintf F
+ atof F
+ atoi F
+ atol F
+ atoll F
+ authdes_create F
+ authdes_getucred F
+ authdes_pk_create F
+ authnone_create F
+ authunix_create F
+ authunix_create_default F
+ backtrace F
+ backtrace_symbols F
+ backtrace_symbols_fd F
+ basename F
+ bcmp F
+ bcopy F
+ bdflush F
+ bind F
+ bind_textdomain_codeset F
+ bindresvport F
+ bindtextdomain F
+ brk F
+ bsd_signal F
+ bsearch F
+ btowc F
+ bzero F
+ c16rtomb F
+ c32rtomb F
+ calloc F
+ callrpc F
+ canonicalize_file_name F
+ capget F
+ capset F
+ catclose F
+ catgets F
+ catopen F
+ cbc_crypt F
+ cfgetispeed F
+ cfgetospeed F
+ cfmakeraw F
+ cfree F
+ cfsetispeed F
+ cfsetospeed F
+ cfsetspeed F
+ chdir F
+ chflags F
+ chmod F
+ chown F
+ chroot F
+ clearenv F
+ clearerr F
+ clearerr_unlocked F
+ clnt_broadcast F
+ clnt_create F
+ clnt_pcreateerror F
+ clnt_perrno F
+ clnt_perror F
+ clnt_spcreateerror F
+ clnt_sperrno F
+ clnt_sperror F
+ clntraw_create F
+ clnttcp_create F
+ clntudp_bufcreate F
+ clntudp_create F
+ clntunix_create F
+ clock F
+ clock_adjtime F
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ clone F
+ close F
+ closedir F
+ closelog F
+ confstr F
+ connect F
+ copysign F
+ copysignf F
+ copysignl F
+ creat F
+ creat64 F
+ create_module F
+ ctermid F
+ ctime F
+ ctime_r F
+ cuserid F
+ daemon F
+ daylight D 0x4
+ dcgettext F
+ dcngettext F
+ delete_module F
+ des_setparity F
+ dgettext F
+ difftime F
+ dirfd F
+ dirname F
+ div F
+ dl_iterate_phdr F
+ dngettext F
+ dprintf F
+ drand48 F
+ drand48_r F
+ dup F
+ dup2 F
+ dup3 F
+ duplocale F
+ dysize F
+ eaccess F
+ ecb_crypt F
+ ecvt F
+ ecvt_r F
+ endaliasent F
+ endfsent F
+ endgrent F
+ endhostent F
+ endmntent F
+ endnetent F
+ endnetgrent F
+ endprotoent F
+ endpwent F
+ endrpcent F
+ endservent F
+ endsgent F
+ endspent F
+ endttyent F
+ endusershell F
+ endutent F
+ endutxent F
+ environ D 0x8
+ envz_add F
+ envz_entry F
+ envz_get F
+ envz_merge F
+ envz_remove F
+ envz_strip F
+ epoll_create F
+ epoll_create1 F
+ epoll_ctl F
+ epoll_pwait F
+ epoll_wait F
+ erand48 F
+ erand48_r F
+ err F
+ error F
+ error_at_line F
+ error_message_count D 0x4
+ error_one_per_line D 0x4
+ error_print_progname D 0x8
+ errx F
+ ether_aton F
+ ether_aton_r F
+ ether_hostton F
+ ether_line F
+ ether_ntoa F
+ ether_ntoa_r F
+ ether_ntohost F
+ euidaccess F
+ eventfd F
+ eventfd_read F
+ eventfd_write F
+ execl F
+ execle F
+ execlp F
+ execv F
+ execve F
+ execvp F
+ execvpe F
+ exit F
+ faccessat F
+ fallocate F
+ fallocate64 F
+ fanotify_init F
+ fanotify_mark F
+ fattach F
+ fchdir F
+ fchflags F
+ fchmod F
+ fchmodat F
+ fchown F
+ fchownat F
+ fclose F
+ fcloseall F
+ fcntl F
+ fcvt F
+ fcvt_r F
+ fdatasync F
+ fdetach F
+ fdopen F
+ fdopendir F
+ feof F
+ feof_unlocked F
+ ferror F
+ ferror_unlocked F
+ fexecve F
+ fflush F
+ fflush_unlocked F
+ ffs F
+ ffsl F
+ ffsll F
+ fgetc F
+ fgetc_unlocked F
+ fgetgrent F
+ fgetgrent_r F
+ fgetpos F
+ fgetpos64 F
+ fgetpwent F
+ fgetpwent_r F
+ fgets F
+ fgets_unlocked F
+ fgetsgent F
+ fgetsgent_r F
+ fgetspent F
+ fgetspent_r F
+ fgetwc F
+ fgetwc_unlocked F
+ fgetws F
+ fgetws_unlocked F
+ fgetxattr F
+ fileno F
+ fileno_unlocked F
+ finite F
+ finitef F
+ finitel F
+ flistxattr F
+ flock F
+ flockfile F
+ fmemopen F
+ fmtmsg F
+ fnmatch F
+ fopen F
+ fopen64 F
+ fopencookie F
+ fork F
+ fpathconf F
+ fprintf F
+ fputc F
+ fputc_unlocked F
+ fputs F
+ fputs_unlocked F
+ fputwc F
+ fputwc_unlocked F
+ fputws F
+ fputws_unlocked F
+ fread F
+ fread_unlocked F
+ free F
+ freeaddrinfo F
+ freeifaddrs F
+ freelocale F
+ fremovexattr F
+ freopen F
+ freopen64 F
+ frexp F
+ frexpf F
+ frexpl F
+ fscanf F
+ fseek F
+ fseeko F
+ fseeko64 F
+ fsetpos F
+ fsetpos64 F
+ fsetxattr F
+ fstatfs F
+ fstatfs64 F
+ fstatvfs F
+ fstatvfs64 F
+ fsync F
+ ftell F
+ ftello F
+ ftello64 F
+ ftime F
+ ftok F
+ ftruncate F
+ ftruncate64 F
+ ftrylockfile F
+ fts_children F
+ fts_close F
+ fts_open F
+ fts_read F
+ fts_set F
+ ftw F
+ ftw64 F
+ funlockfile F
+ futimens F
+ futimes F
+ futimesat F
+ fwide F
+ fwprintf F
+ fwrite F
+ fwrite_unlocked F
+ fwscanf F
+ gai_strerror F
+ gcvt F
+ get_avphys_pages F
+ get_current_dir_name F
+ get_kernel_syms F
+ get_myaddress F
+ get_nprocs F
+ get_nprocs_conf F
+ get_phys_pages F
+ getaddrinfo F
+ getaliasbyname F
+ getaliasbyname_r F
+ getaliasent F
+ getaliasent_r F
+ getauxval F
+ getc F
+ getc_unlocked F
+ getchar F
+ getchar_unlocked F
+ getcontext F
+ getcwd F
+ getdate F
+ getdate_err D 0x4
+ getdate_r F
+ getdelim F
+ getdirentries F
+ getdirentries64 F
+ getdomainname F
+ getdtablesize F
+ getegid F
+ getenv F
+ geteuid F
+ getfsent F
+ getfsfile F
+ getfsspec F
+ getgid F
+ getgrent F
+ getgrent_r F
+ getgrgid F
+ getgrgid_r F
+ getgrnam F
+ getgrnam_r F
+ getgrouplist F
+ getgroups F
+ gethostbyaddr F
+ gethostbyaddr_r F
+ gethostbyname F
+ gethostbyname2 F
+ gethostbyname2_r F
+ gethostbyname_r F
+ gethostent F
+ gethostent_r F
+ gethostid F
+ gethostname F
+ getifaddrs F
+ getipv4sourcefilter F
+ getitimer F
+ getline F
+ getloadavg F
+ getlogin F
+ getlogin_r F
+ getmntent F
+ getmntent_r F
+ getmsg F
+ getnameinfo F
+ getnetbyaddr F
+ getnetbyaddr_r F
+ getnetbyname F
+ getnetbyname_r F
+ getnetent F
+ getnetent_r F
+ getnetgrent F
+ getnetgrent_r F
+ getnetname F
+ getopt F
+ getopt_long F
+ getopt_long_only F
+ getpagesize F
+ getpass F
+ getpeername F
+ getpgid F
+ getpgrp F
+ getpid F
+ getpmsg F
+ getppid F
+ getpriority F
+ getprotobyname F
+ getprotobyname_r F
+ getprotobynumber F
+ getprotobynumber_r F
+ getprotoent F
+ getprotoent_r F
+ getpt F
+ getpublickey F
+ getpw F
+ getpwent F
+ getpwent_r F
+ getpwnam F
+ getpwnam_r F
+ getpwuid F
+ getpwuid_r F
+ getresgid F
+ getresuid F
+ getrlimit F
+ getrlimit64 F
+ getrpcbyname F
+ getrpcbyname_r F
+ getrpcbynumber F
+ getrpcbynumber_r F
+ getrpcent F
+ getrpcent_r F
+ getrpcport F
+ getrusage F
+ gets F
+ getsecretkey F
+ getservbyname F
+ getservbyname_r F
+ getservbyport F
+ getservbyport_r F
+ getservent F
+ getservent_r F
+ getsgent F
+ getsgent_r F
+ getsgnam F
+ getsgnam_r F
+ getsid F
+ getsockname F
+ getsockopt F
+ getsourcefilter F
+ getspent F
+ getspent_r F
+ getspnam F
+ getspnam_r F
+ getsubopt F
+ gettext F
+ gettimeofday F
+ getttyent F
+ getttynam F
+ getuid F
+ getusershell F
+ getutent F
+ getutent_r F
+ getutid F
+ getutid_r F
+ getutline F
+ getutline_r F
+ getutmp F
+ getutmpx F
+ getutxent F
+ getutxid F
+ getutxline F
+ getw F
+ getwc F
+ getwc_unlocked F
+ getwchar F
+ getwchar_unlocked F
+ getwd F
+ getxattr F
+ glob F
+ glob64 F
+ glob_pattern_p F
+ globfree F
+ globfree64 F
+ gmtime F
+ gmtime_r F
+ gnu_dev_major F
+ gnu_dev_makedev F
+ gnu_dev_minor F
+ gnu_get_libc_release F
+ gnu_get_libc_version F
+ grantpt F
+ group_member F
+ gsignal F
+ gtty F
+ h_errlist D 0x28
+ h_nerr D 0x4
+ hasmntopt F
+ hcreate F
+ hcreate_r F
+ hdestroy F
+ hdestroy_r F
+ herror F
+ host2netname F
+ hsearch F
+ hsearch_r F
+ hstrerror F
+ htonl F
+ htons F
+ iconv F
+ iconv_close F
+ iconv_open F
+ if_freenameindex F
+ if_indextoname F
+ if_nameindex F
+ if_nametoindex F
+ imaxabs F
+ imaxdiv F
+ in6addr_any D 0x10
+ in6addr_loopback D 0x10
+ index F
+ inet6_opt_append F
+ inet6_opt_find F
+ inet6_opt_finish F
+ inet6_opt_get_val F
+ inet6_opt_init F
+ inet6_opt_next F
+ inet6_opt_set_val F
+ inet6_option_alloc F
+ inet6_option_append F
+ inet6_option_find F
+ inet6_option_init F
+ inet6_option_next F
+ inet6_option_space F
+ inet6_rth_add F
+ inet6_rth_getaddr F
+ inet6_rth_init F
+ inet6_rth_reverse F
+ inet6_rth_segments F
+ inet6_rth_space F
+ inet_addr F
+ inet_aton F
+ inet_lnaof F
+ inet_makeaddr F
+ inet_netof F
+ inet_network F
+ inet_nsap_addr F
+ inet_nsap_ntoa F
+ inet_ntoa F
+ inet_ntop F
+ inet_pton F
+ init_module F
+ initgroups F
+ initstate F
+ initstate_r F
+ innetgr F
+ inotify_add_watch F
+ inotify_init F
+ inotify_init1 F
+ inotify_rm_watch F
+ insque F
+ ioctl F
+ iruserok F
+ iruserok_af F
+ isalnum F
+ isalnum_l F
+ isalpha F
+ isalpha_l F
+ isascii F
+ isastream F
+ isatty F
+ isblank F
+ isblank_l F
+ iscntrl F
+ iscntrl_l F
+ isctype F
+ isdigit F
+ isdigit_l F
+ isfdtype F
+ isgraph F
+ isgraph_l F
+ isinf F
+ isinff F
+ isinfl F
+ islower F
+ islower_l F
+ isnan F
+ isnanf F
+ isnanl F
+ isprint F
+ isprint_l F
+ ispunct F
+ ispunct_l F
+ isspace F
+ isspace_l F
+ isupper F
+ isupper_l F
+ iswalnum F
+ iswalnum_l F
+ iswalpha F
+ iswalpha_l F
+ iswblank F
+ iswblank_l F
+ iswcntrl F
+ iswcntrl_l F
+ iswctype F
+ iswctype_l F
+ iswdigit F
+ iswdigit_l F
+ iswgraph F
+ iswgraph_l F
+ iswlower F
+ iswlower_l F
+ iswprint F
+ iswprint_l F
+ iswpunct F
+ iswpunct_l F
+ iswspace F
+ iswspace_l F
+ iswupper F
+ iswupper_l F
+ iswxdigit F
+ iswxdigit_l F
+ isxdigit F
+ isxdigit_l F
+ jrand48 F
+ jrand48_r F
+ key_decryptsession F
+ key_decryptsession_pk F
+ key_encryptsession F
+ key_encryptsession_pk F
+ key_gendes F
+ key_get_conv F
+ key_secretkey_is_set F
+ key_setnet F
+ key_setsecret F
+ kill F
+ killpg F
+ klogctl F
+ l64a F
+ labs F
+ lchmod F
+ lchown F
+ lckpwdf F
+ lcong48 F
+ lcong48_r F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ ldiv F
+ lfind F
+ lgetxattr F
+ link F
+ linkat F
+ listen F
+ listxattr F
+ llabs F
+ lldiv F
+ llistxattr F
+ llseek F
+ loc1 D 0x8
+ loc2 D 0x8
+ localeconv F
+ localtime F
+ localtime_r F
+ lockf F
+ lockf64 F
+ locs D 0x8
+ longjmp F
+ lrand48 F
+ lrand48_r F
+ lremovexattr F
+ lsearch F
+ lseek F
+ lseek64 F
+ lsetxattr F
+ lutimes F
+ madvise F
+ makecontext F
+ mallinfo F
+ malloc F
+ malloc_get_state F
+ malloc_info F
+ malloc_set_state F
+ malloc_stats F
+ malloc_trim F
+ malloc_usable_size F
+ mallopt F
+ mallwatch D 0x8
+ mblen F
+ mbrlen F
+ mbrtoc16 F
+ mbrtoc32 F
+ mbrtowc F
+ mbsinit F
+ mbsnrtowcs F
+ mbsrtowcs F
+ mbstowcs F
+ mbtowc F
+ mcheck F
+ mcheck_check_all F
+ mcheck_pedantic F
+ memalign F
+ memccpy F
+ memchr F
+ memcmp F
+ memcpy F
+ memfrob F
+ memmem F
+ memmove F
+ mempcpy F
+ memrchr F
+ memset F
+ mincore F
+ mkdir F
+ mkdirat F
+ mkdtemp F
+ mkfifo F
+ mkfifoat F
+ mkostemp F
+ mkostemp64 F
+ mkostemps F
+ mkostemps64 F
+ mkstemp F
+ mkstemp64 F
+ mkstemps F
+ mkstemps64 F
+ mktemp F
+ mktime F
+ mlock F
+ mlockall F
+ mmap F
+ mmap64 F
+ modf F
+ modff F
+ modfl F
+ moncontrol F
+ monstartup F
+ mount F
+ mprobe F
+ mprotect F
+ mrand48 F
+ mrand48_r F
+ mremap F
+ msgctl F
+ msgget F
+ msgrcv F
+ msgsnd F
+ msync F
+ mtrace F
+ munlock F
+ munlockall F
+ munmap F
+ muntrace F
+ name_to_handle_at F
+ nanosleep F
+ netname2host F
+ netname2user F
+ newlocale F
+ nfsservctl F
+ nftw F
+ nftw64 F
+ ngettext F
+ nice F
+ nl_langinfo F
+ nl_langinfo_l F
+ nrand48 F
+ nrand48_r F
+ ntohl F
+ ntohs F
+ ntp_adjtime F
+ ntp_gettime F
+ ntp_gettimex F
+ obstack_alloc_failed_handler D 0x8
+ obstack_exit_failure D 0x4
+ obstack_free F
+ obstack_printf F
+ obstack_vprintf F
+ on_exit F
+ open F
+ open64 F
+ open_by_handle_at F
+ open_memstream F
+ open_wmemstream F
+ openat F
+ openat64 F
+ opendir F
+ openlog F
+ optarg D 0x8
+ opterr D 0x4
+ optind D 0x4
+ optopt D 0x4
+ parse_printf_format F
+ passwd2des F
+ pathconf F
+ pause F
+ pclose F
+ perror F
+ personality F
+ pipe F
+ pipe2 F
+ pivot_root F
+ pmap_getmaps F
+ pmap_getport F
+ pmap_rmtcall F
+ pmap_set F
+ pmap_unset F
+ poll F
+ popen F
+ posix_fadvise F
+ posix_fadvise64 F
+ posix_fallocate F
+ posix_fallocate64 F
+ posix_madvise F
+ posix_memalign F
+ posix_openpt F
+ posix_spawn F
+ posix_spawn_file_actions_addclose F
+ posix_spawn_file_actions_adddup2 F
+ posix_spawn_file_actions_addopen F
+ posix_spawn_file_actions_destroy F
+ posix_spawn_file_actions_init F
+ posix_spawnattr_destroy F
+ posix_spawnattr_getflags F
+ posix_spawnattr_getpgroup F
+ posix_spawnattr_getschedparam F
+ posix_spawnattr_getschedpolicy F
+ posix_spawnattr_getsigdefault F
+ posix_spawnattr_getsigmask F
+ posix_spawnattr_init F
+ posix_spawnattr_setflags F
+ posix_spawnattr_setpgroup F
+ posix_spawnattr_setschedparam F
+ posix_spawnattr_setschedpolicy F
+ posix_spawnattr_setsigdefault F
+ posix_spawnattr_setsigmask F
+ posix_spawnp F
+ ppoll F
+ prctl F
+ pread F
+ pread64 F
+ preadv F
+ preadv64 F
+ printf F
+ printf_size F
+ printf_size_info F
+ prlimit F
+ prlimit64 F
+ process_vm_readv F
+ process_vm_writev F
+ profil F
+ program_invocation_name D 0x8
+ program_invocation_short_name D 0x8
+ pselect F
+ psiginfo F
+ psignal F
+ pthread_attr_destroy F
+ pthread_attr_getdetachstate F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_init F
+ pthread_attr_setdetachstate F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_init F
+ pthread_equal F
+ pthread_exit F
+ pthread_getschedparam F
+ pthread_mutex_destroy F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_unlock F
+ pthread_self F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setschedparam F
+ ptrace F
+ ptsname F
+ ptsname_r F
+ putc F
+ putc_unlocked F
+ putchar F
+ putchar_unlocked F
+ putenv F
+ putgrent F
+ putmsg F
+ putpmsg F
+ putpwent F
+ puts F
+ putsgent F
+ putspent F
+ pututline F
+ pututxline F
+ putw F
+ putwc F
+ putwc_unlocked F
+ putwchar F
+ putwchar_unlocked F
+ pvalloc F
+ pwrite F
+ pwrite64 F
+ pwritev F
+ pwritev64 F
+ qecvt F
+ qecvt_r F
+ qfcvt F
+ qfcvt_r F
+ qgcvt F
+ qsort F
+ qsort_r F
+ query_module F
+ quick_exit F
+ quotactl F
+ raise F
+ rand F
+ rand_r F
+ random F
+ random_r F
+ rawmemchr F
+ rcmd F
+ rcmd_af F
+ re_comp F
+ re_compile_fastmap F
+ re_compile_pattern F
+ re_exec F
+ re_match F
+ re_match_2 F
+ re_search F
+ re_search_2 F
+ re_set_registers F
+ re_set_syntax F
+ re_syntax_options D 0x8
+ read F
+ readahead F
+ readdir F
+ readdir64 F
+ readdir64_r F
+ readdir_r F
+ readlink F
+ readlinkat F
+ readv F
+ realloc F
+ realpath F
+ reboot F
+ recv F
+ recvfrom F
+ recvmmsg F
+ recvmsg F
+ regcomp F
+ regerror F
+ regexec F
+ regfree F
+ register_printf_function F
+ register_printf_modifier F
+ register_printf_specifier F
+ register_printf_type F
+ registerrpc F
+ remap_file_pages F
+ remove F
+ removexattr F
+ remque F
+ rename F
+ renameat F
+ revoke F
+ rewind F
+ rewinddir F
+ rexec F
+ rexec_af F
+ rexecoptions D 0x4
+ rindex F
+ rmdir F
+ rpc_createerr D 0x20
+ rpmatch F
+ rresvport F
+ rresvport_af F
+ rtime F
+ ruserok F
+ ruserok_af F
+ ruserpass F
+ sbrk F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ scandir F
+ scandir64 F
+ scandirat F
+ scandirat64 F
+ scanf F
+ sched_get_priority_max F
+ sched_get_priority_min F
+ sched_getaffinity F
+ sched_getcpu F
+ sched_getparam F
+ sched_getscheduler F
+ sched_rr_get_interval F
+ sched_setaffinity F
+ sched_setparam F
+ sched_setscheduler F
+ sched_yield F
+ secure_getenv F
+ seed48 F
+ seed48_r F
+ seekdir F
+ select F
+ semctl F
+ semget F
+ semop F
+ semtimedop F
+ send F
+ sendfile F
+ sendfile64 F
+ sendmmsg F
+ sendmsg F
+ sendto F
+ setaliasent F
+ setbuf F
+ setbuffer F
+ setcontext F
+ setdomainname F
+ setegid F
+ setenv F
+ seteuid F
+ setfsent F
+ setfsgid F
+ setfsuid F
+ setgid F
+ setgrent F
+ setgroups F
+ sethostent F
+ sethostid F
+ sethostname F
+ setipv4sourcefilter F
+ setitimer F
+ setjmp F
+ setlinebuf F
+ setlocale F
+ setlogin F
+ setlogmask F
+ setmntent F
+ setnetent F
+ setnetgrent F
+ setns F
+ setpgid F
+ setpgrp F
+ setpriority F
+ setprotoent F
+ setpwent F
+ setregid F
+ setresgid F
+ setresuid F
+ setreuid F
+ setrlimit F
+ setrlimit64 F
+ setrpcent F
+ setservent F
+ setsgent F
+ setsid F
+ setsockopt F
+ setsourcefilter F
+ setspent F
+ setstate F
+ setstate_r F
+ settimeofday F
+ setttyent F
+ setuid F
+ setusershell F
+ setutent F
+ setutxent F
+ setvbuf F
+ setxattr F
+ sgetsgent F
+ sgetsgent_r F
+ sgetspent F
+ sgetspent_r F
+ shmat F
+ shmctl F
+ shmdt F
+ shmget F
+ shutdown F
+ sigaction F
+ sigaddset F
+ sigaltstack F
+ sigandset F
+ sigblock F
+ sigdelset F
+ sigemptyset F
+ sigfillset F
+ siggetmask F
+ sighold F
+ sigignore F
+ siginterrupt F
+ sigisemptyset F
+ sigismember F
+ siglongjmp F
+ signal F
+ signalfd F
+ sigorset F
+ sigpause F
+ sigpending F
+ sigprocmask F
+ sigqueue F
+ sigrelse F
+ sigreturn F
+ sigset F
+ sigsetmask F
+ sigstack F
+ sigsuspend F
+ sigtimedwait F
+ sigvec F
+ sigwait F
+ sigwaitinfo F
+ sleep F
+ snprintf F
+ sockatmark F
+ socket F
+ socketpair F
+ splice F
+ sprintf F
+ sprofil F
+ srand F
+ srand48 F
+ srand48_r F
+ srandom F
+ srandom_r F
+ sscanf F
+ ssignal F
+ sstk F
+ statfs F
+ statfs64 F
+ statvfs F
+ statvfs64 F
+ stderr D 0x8
+ stdin D 0x8
+ stdout D 0x8
+ step F
+ stime F
+ stpcpy F
+ stpncpy F
+ strcasecmp F
+ strcasecmp_l F
+ strcasestr F
+ strcat F
+ strchr F
+ strchrnul F
+ strcmp F
+ strcoll F
+ strcoll_l F
+ strcpy F
+ strcspn F
+ strdup F
+ strerror F
+ strerror_l F
+ strerror_r F
+ strfmon F
+ strfmon_l F
+ strfry F
+ strftime F
+ strftime_l F
+ strlen F
+ strncasecmp F
+ strncasecmp_l F
+ strncat F
+ strncmp F
+ strncpy F
+ strndup F
+ strnlen F
+ strpbrk F
+ strptime F
+ strptime_l F
+ strrchr F
+ strsep F
+ strsignal F
+ strspn F
+ strstr F
+ strtod F
+ strtod_l F
+ strtof F
+ strtof_l F
+ strtoimax F
+ strtok F
+ strtok_r F
+ strtol F
+ strtol_l F
+ strtold F
+ strtold_l F
+ strtoll F
+ strtoll_l F
+ strtoq F
+ strtoul F
+ strtoul_l F
+ strtoull F
+ strtoull_l F
+ strtoumax F
+ strtouq F
+ strverscmp F
+ strxfrm F
+ strxfrm_l F
+ stty F
+ svc_exit F
+ svc_fdset D 0x80
+ svc_getreq F
+ svc_getreq_common F
+ svc_getreq_poll F
+ svc_getreqset F
+ svc_max_pollfd D 0x4
+ svc_pollfd D 0x8
+ svc_register F
+ svc_run F
+ svc_sendreply F
+ svc_unregister F
+ svcauthdes_stats D 0x18
+ svcerr_auth F
+ svcerr_decode F
+ svcerr_noproc F
+ svcerr_noprog F
+ svcerr_progvers F
+ svcerr_systemerr F
+ svcerr_weakauth F
+ svcfd_create F
+ svcraw_create F
+ svctcp_create F
+ svcudp_bufcreate F
+ svcudp_create F
+ svcudp_enablecache F
+ svcunix_create F
+ svcunixfd_create F
+ swab F
+ swapcontext F
+ swapoff F
+ swapon F
+ swprintf F
+ swscanf F
+ symlink F
+ symlinkat F
+ sync F
+ sync_file_range F
+ syncfs F
+ sys_errlist D 0x438
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x208
+ sys_siglist D 0x208
+ syscall F
+ sysconf F
+ sysctl F
+ sysinfo F
+ syslog F
+ system F
+ sysv_signal F
+ tcdrain F
+ tcflow F
+ tcflush F
+ tcgetattr F
+ tcgetpgrp F
+ tcgetsid F
+ tcsendbreak F
+ tcsetattr F
+ tcsetpgrp F
+ tdelete F
+ tdestroy F
+ tee F
+ telldir F
+ tempnam F
+ textdomain F
+ tfind F
+ time F
+ timegm F
+ timelocal F
+ timerfd_create F
+ timerfd_gettime F
+ timerfd_settime F
+ times F
+ timespec_get F
+ timezone D 0x8
+ tmpfile F
+ tmpfile64 F
+ tmpnam F
+ tmpnam_r F
+ toascii F
+ tolower F
+ tolower_l F
+ toupper F
+ toupper_l F
+ towctrans F
+ towctrans_l F
+ towlower F
+ towlower_l F
+ towupper F
+ towupper_l F
+ tr_break F
+ truncate F
+ truncate64 F
+ tsearch F
+ ttyname F
+ ttyname_r F
+ ttyslot F
+ twalk F
+ tzname D 0x10
+ tzset F
+ ualarm F
+ ulckpwdf F
+ ulimit F
+ umask F
+ umount F
+ umount2 F
+ uname F
+ ungetc F
+ ungetwc F
+ unlink F
+ unlinkat F
+ unlockpt F
+ unsetenv F
+ unshare F
+ updwtmp F
+ updwtmpx F
+ uselib F
+ uselocale F
+ user2netname F
+ usleep F
+ ustat F
+ utime F
+ utimensat F
+ utimes F
+ utmpname F
+ utmpxname F
+ valloc F
+ vasprintf F
+ vdprintf F
+ verr F
+ verrx F
+ versionsort F
+ versionsort64 F
+ vfork F
+ vfprintf F
+ vfscanf F
+ vfwprintf F
+ vfwscanf F
+ vhangup F
+ vlimit F
+ vmsplice F
+ vprintf F
+ vscanf F
+ vsnprintf F
+ vsprintf F
+ vsscanf F
+ vswprintf F
+ vswscanf F
+ vsyslog F
+ vtimes F
+ vwarn F
+ vwarnx F
+ vwprintf F
+ vwscanf F
+ wait F
+ wait3 F
+ wait4 F
+ waitid F
+ waitpid F
+ warn F
+ warnx F
+ wcpcpy F
+ wcpncpy F
+ wcrtomb F
+ wcscasecmp F
+ wcscasecmp_l F
+ wcscat F
+ wcschr F
+ wcschrnul F
+ wcscmp F
+ wcscoll F
+ wcscoll_l F
+ wcscpy F
+ wcscspn F
+ wcsdup F
+ wcsftime F
+ wcsftime_l F
+ wcslen F
+ wcsncasecmp F
+ wcsncasecmp_l F
+ wcsncat F
+ wcsncmp F
+ wcsncpy F
+ wcsnlen F
+ wcsnrtombs F
+ wcspbrk F
+ wcsrchr F
+ wcsrtombs F
+ wcsspn F
+ wcsstr F
+ wcstod F
+ wcstod_l F
+ wcstof F
+ wcstof_l F
+ wcstoimax F
+ wcstok F
+ wcstol F
+ wcstol_l F
+ wcstold F
+ wcstold_l F
+ wcstoll F
+ wcstoll_l F
+ wcstombs F
+ wcstoq F
+ wcstoul F
+ wcstoul_l F
+ wcstoull F
+ wcstoull_l F
+ wcstoumax F
+ wcstouq F
+ wcswcs F
+ wcswidth F
+ wcsxfrm F
+ wcsxfrm_l F
+ wctob F
+ wctomb F
+ wctrans F
+ wctrans_l F
+ wctype F
+ wctype_l F
+ wcwidth F
+ wmemchr F
+ wmemcmp F
+ wmemcpy F
+ wmemmove F
+ wmempcpy F
+ wmemset F
+ wordexp F
+ wordfree F
+ wprintf F
+ write F
+ writev F
+ wscanf F
+ xdecrypt F
+ xdr_accepted_reply F
+ xdr_array F
+ xdr_authdes_cred F
+ xdr_authdes_verf F
+ xdr_authunix_parms F
+ xdr_bool F
+ xdr_bytes F
+ xdr_callhdr F
+ xdr_callmsg F
+ xdr_char F
+ xdr_cryptkeyarg F
+ xdr_cryptkeyarg2 F
+ xdr_cryptkeyres F
+ xdr_des_block F
+ xdr_double F
+ xdr_enum F
+ xdr_float F
+ xdr_free F
+ xdr_getcredres F
+ xdr_hyper F
+ xdr_int F
+ xdr_int16_t F
+ xdr_int32_t F
+ xdr_int64_t F
+ xdr_int8_t F
+ xdr_key_netstarg F
+ xdr_key_netstres F
+ xdr_keybuf F
+ xdr_keystatus F
+ xdr_long F
+ xdr_longlong_t F
+ xdr_netnamestr F
+ xdr_netobj F
+ xdr_opaque F
+ xdr_opaque_auth F
+ xdr_pmap F
+ xdr_pmaplist F
+ xdr_pointer F
+ xdr_quad_t F
+ xdr_reference F
+ xdr_rejected_reply F
+ xdr_replymsg F
+ xdr_rmtcall_args F
+ xdr_rmtcallres F
+ xdr_short F
+ xdr_sizeof F
+ xdr_string F
+ xdr_u_char F
+ xdr_u_hyper F
+ xdr_u_int F
+ xdr_u_long F
+ xdr_u_longlong_t F
+ xdr_u_quad_t F
+ xdr_u_short F
+ xdr_uint16_t F
+ xdr_uint32_t F
+ xdr_uint64_t F
+ xdr_uint8_t F
+ xdr_union F
+ xdr_unixcred F
+ xdr_vector F
+ xdr_void F
+ xdr_wrapstring F
+ xdrmem_create F
+ xdrrec_create F
+ xdrrec_endofrecord F
+ xdrrec_eof F
+ xdrrec_skiprecord F
+ xdrstdio_create F
+ xencrypt F
+ xprt_register F
+ xprt_unregister F
+GLIBC_2.18
+ GLIBC_2.18 A
+ __cxa_thread_atexit_impl F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist
new file mode 100644
index 000000000..177c53620
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ crypt F
+ crypt_r F
+ encrypt F
+ encrypt_r F
+ fcrypt F
+ setkey F
+ setkey_r F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist
new file mode 100644
index 000000000..6caff8826
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist
@@ -0,0 +1,11 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ dladdr F
+ dladdr1 F
+ dlclose F
+ dlerror F
+ dlinfo F
+ dlmopen F
+ dlopen F
+ dlsym F
+ dlvsym F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist
new file mode 100644
index 000000000..a820074ab
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist
@@ -0,0 +1,407 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ _LIB_VERSION D 0x4
+ __acos_finite F
+ __acosf_finite F
+ __acosh_finite F
+ __acoshf_finite F
+ __acoshl_finite F
+ __acosl_finite F
+ __asin_finite F
+ __asinf_finite F
+ __asinl_finite F
+ __atan2_finite F
+ __atan2f_finite F
+ __atan2l_finite F
+ __atanh_finite F
+ __atanhf_finite F
+ __atanhl_finite F
+ __clog10 F
+ __clog10f F
+ __clog10l F
+ __cosh_finite F
+ __coshf_finite F
+ __coshl_finite F
+ __exp10_finite F
+ __exp10f_finite F
+ __exp10l_finite F
+ __exp2_finite F
+ __exp2f_finite F
+ __exp2l_finite F
+ __exp_finite F
+ __expf_finite F
+ __expl_finite F
+ __fe_dfl_env D 0x8
+ __fe_enabled_env D 0x8
+ __fe_nomask_env F
+ __fe_nonieee_env D 0x8
+ __finite F
+ __finitef F
+ __finitel F
+ __fmod_finite F
+ __fmodf_finite F
+ __fmodl_finite F
+ __fpclassify F
+ __fpclassifyf F
+ __fpclassifyl F
+ __gamma_r_finite F
+ __gammaf_r_finite F
+ __gammal_r_finite F
+ __hypot_finite F
+ __hypotf_finite F
+ __hypotl_finite F
+ __j0_finite F
+ __j0f_finite F
+ __j0l_finite F
+ __j1_finite F
+ __j1f_finite F
+ __j1l_finite F
+ __jn_finite F
+ __jnf_finite F
+ __jnl_finite F
+ __lgamma_r_finite F
+ __lgammaf_r_finite F
+ __lgammal_r_finite F
+ __log10_finite F
+ __log10f_finite F
+ __log10l_finite F
+ __log2_finite F
+ __log2f_finite F
+ __log2l_finite F
+ __log_finite F
+ __logf_finite F
+ __logl_finite F
+ __nldbl_nexttowardf F
+ __pow_finite F
+ __powf_finite F
+ __powl_finite F
+ __remainder_finite F
+ __remainderf_finite F
+ __remainderl_finite F
+ __scalb_finite F
+ __scalbf_finite F
+ __scalbl_finite F
+ __signbit F
+ __signbitf F
+ __signbitl F
+ __sinh_finite F
+ __sinhf_finite F
+ __sinhl_finite F
+ __sqrt_finite F
+ __sqrtf_finite F
+ __sqrtl_finite F
+ __y0_finite F
+ __y0f_finite F
+ __y0l_finite F
+ __y1_finite F
+ __y1f_finite F
+ __y1l_finite F
+ __yn_finite F
+ __ynf_finite F
+ __ynl_finite F
+ acos F
+ acosf F
+ acosh F
+ acoshf F
+ acoshl F
+ acosl F
+ asin F
+ asinf F
+ asinh F
+ asinhf F
+ asinhl F
+ asinl F
+ atan F
+ atan2 F
+ atan2f F
+ atan2l F
+ atanf F
+ atanh F
+ atanhf F
+ atanhl F
+ atanl F
+ cabs F
+ cabsf F
+ cabsl F
+ cacos F
+ cacosf F
+ cacosh F
+ cacoshf F
+ cacoshl F
+ cacosl F
+ carg F
+ cargf F
+ cargl F
+ casin F
+ casinf F
+ casinh F
+ casinhf F
+ casinhl F
+ casinl F
+ catan F
+ catanf F
+ catanh F
+ catanhf F
+ catanhl F
+ catanl F
+ cbrt F
+ cbrtf F
+ cbrtl F
+ ccos F
+ ccosf F
+ ccosh F
+ ccoshf F
+ ccoshl F
+ ccosl F
+ ceil F
+ ceilf F
+ ceill F
+ cexp F
+ cexpf F
+ cexpl F
+ cimag F
+ cimagf F
+ cimagl F
+ clog F
+ clog10 F
+ clog10f F
+ clog10l F
+ clogf F
+ clogl F
+ conj F
+ conjf F
+ conjl F
+ copysign F
+ copysignf F
+ copysignl F
+ cos F
+ cosf F
+ cosh F
+ coshf F
+ coshl F
+ cosl F
+ cpow F
+ cpowf F
+ cpowl F
+ cproj F
+ cprojf F
+ cprojl F
+ creal F
+ crealf F
+ creall F
+ csin F
+ csinf F
+ csinh F
+ csinhf F
+ csinhl F
+ csinl F
+ csqrt F
+ csqrtf F
+ csqrtl F
+ ctan F
+ ctanf F
+ ctanh F
+ ctanhf F
+ ctanhl F
+ ctanl F
+ drem F
+ dremf F
+ dreml F
+ erf F
+ erfc F
+ erfcf F
+ erfcl F
+ erff F
+ erfl F
+ exp F
+ exp10 F
+ exp10f F
+ exp10l F
+ exp2 F
+ exp2f F
+ exp2l F
+ expf F
+ expl F
+ expm1 F
+ expm1f F
+ expm1l F
+ fabs F
+ fabsf F
+ fabsl F
+ fdim F
+ fdimf F
+ fdiml F
+ feclearexcept F
+ fedisableexcept F
+ feenableexcept F
+ fegetenv F
+ fegetexcept F
+ fegetexceptflag F
+ fegetround F
+ feholdexcept F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ fesetround F
+ fetestexcept F
+ feupdateenv F
+ finite F
+ finitef F
+ finitel F
+ floor F
+ floorf F
+ floorl F
+ fma F
+ fmaf F
+ fmal F
+ fmax F
+ fmaxf F
+ fmaxl F
+ fmin F
+ fminf F
+ fminl F
+ fmod F
+ fmodf F
+ fmodl F
+ frexp F
+ frexpf F
+ frexpl F
+ gamma F
+ gammaf F
+ gammal F
+ hypot F
+ hypotf F
+ hypotl F
+ ilogb F
+ ilogbf F
+ ilogbl F
+ j0 F
+ j0f F
+ j0l F
+ j1 F
+ j1f F
+ j1l F
+ jn F
+ jnf F
+ jnl F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ lgamma F
+ lgamma_r F
+ lgammaf F
+ lgammaf_r F
+ lgammal F
+ lgammal_r F
+ llrint F
+ llrintf F
+ llrintl F
+ llround F
+ llroundf F
+ llroundl F
+ log F
+ log10 F
+ log10f F
+ log10l F
+ log1p F
+ log1pf F
+ log1pl F
+ log2 F
+ log2f F
+ log2l F
+ logb F
+ logbf F
+ logbl F
+ logf F
+ logl F
+ lrint F
+ lrintf F
+ lrintl F
+ lround F
+ lroundf F
+ lroundl F
+ matherr F
+ modf F
+ modff F
+ modfl F
+ nan F
+ nanf F
+ nanl F
+ nearbyint F
+ nearbyintf F
+ nearbyintl F
+ nextafter F
+ nextafterf F
+ nextafterl F
+ nexttoward F
+ nexttowardf F
+ nexttowardl F
+ pow F
+ pow10 F
+ pow10f F
+ pow10l F
+ powf F
+ powl F
+ remainder F
+ remainderf F
+ remainderl F
+ remquo F
+ remquof F
+ remquol F
+ rint F
+ rintf F
+ rintl F
+ round F
+ roundf F
+ roundl F
+ scalb F
+ scalbf F
+ scalbl F
+ scalbln F
+ scalblnf F
+ scalblnl F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ signgam D 0x4
+ significand F
+ significandf F
+ significandl F
+ sin F
+ sincos F
+ sincosf F
+ sincosl F
+ sinf F
+ sinh F
+ sinhf F
+ sinhl F
+ sinl F
+ sqrt F
+ sqrtf F
+ sqrtl F
+ tan F
+ tanf F
+ tanh F
+ tanhf F
+ tanhl F
+ tanl F
+ tgamma F
+ tgammaf F
+ tgammal F
+ trunc F
+ truncf F
+ truncl F
+ y0 F
+ y0f F
+ y0l F
+ y1 F
+ y1f F
+ y1l F
+ yn F
+ ynf F
+ ynl F
+GLIBC_2.18
+ GLIBC_2.18 A
+ __issignaling F
+ __issignalingf F
+ __issignalingl F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist
new file mode 100644
index 000000000..763b8dc16
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist
@@ -0,0 +1,123 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ __free_fdresult F
+ __nis_default_access F
+ __nis_default_group F
+ __nis_default_owner F
+ __nis_default_ttl F
+ __nis_finddirectory F
+ __nis_hash F
+ __nisbind_connect F
+ __nisbind_create F
+ __nisbind_destroy F
+ __nisbind_next F
+ __yp_check F
+ nis_add F
+ nis_add_entry F
+ nis_addmember F
+ nis_checkpoint F
+ nis_clone_directory F
+ nis_clone_object F
+ nis_clone_result F
+ nis_creategroup F
+ nis_destroy_object F
+ nis_destroygroup F
+ nis_dir_cmp F
+ nis_domain_of F
+ nis_domain_of_r F
+ nis_first_entry F
+ nis_free_directory F
+ nis_free_object F
+ nis_free_request F
+ nis_freenames F
+ nis_freeresult F
+ nis_freeservlist F
+ nis_freetags F
+ nis_getnames F
+ nis_getservlist F
+ nis_ismember F
+ nis_leaf_of F
+ nis_leaf_of_r F
+ nis_lerror F
+ nis_list F
+ nis_local_directory F
+ nis_local_group F
+ nis_local_host F
+ nis_local_principal F
+ nis_lookup F
+ nis_mkdir F
+ nis_modify F
+ nis_modify_entry F
+ nis_name_of F
+ nis_name_of_r F
+ nis_next_entry F
+ nis_perror F
+ nis_ping F
+ nis_print_directory F
+ nis_print_entry F
+ nis_print_group F
+ nis_print_group_entry F
+ nis_print_link F
+ nis_print_object F
+ nis_print_result F
+ nis_print_rights F
+ nis_print_table F
+ nis_read_obj F
+ nis_remove F
+ nis_remove_entry F
+ nis_removemember F
+ nis_rmdir F
+ nis_servstate F
+ nis_sperrno F
+ nis_sperror F
+ nis_sperror_r F
+ nis_stats F
+ nis_verifygroup F
+ nis_write_obj F
+ readColdStartFile F
+ writeColdStartFile F
+ xdr_cback_data F
+ xdr_domainname F
+ xdr_keydat F
+ xdr_mapname F
+ xdr_obj_p F
+ xdr_peername F
+ xdr_valdat F
+ xdr_yp_buf F
+ xdr_ypall F
+ xdr_ypbind_binding F
+ xdr_ypbind_resp F
+ xdr_ypbind_resptype F
+ xdr_ypbind_setdom F
+ xdr_ypdelete_args F
+ xdr_ypmap_parms F
+ xdr_ypmaplist F
+ xdr_yppush_status F
+ xdr_yppushresp_xfr F
+ xdr_ypreq_key F
+ xdr_ypreq_nokey F
+ xdr_ypreq_xfr F
+ xdr_ypresp_all F
+ xdr_ypresp_key_val F
+ xdr_ypresp_maplist F
+ xdr_ypresp_master F
+ xdr_ypresp_order F
+ xdr_ypresp_val F
+ xdr_ypresp_xfr F
+ xdr_ypstat F
+ xdr_ypupdate_args F
+ xdr_ypxfrstat F
+ yp_all F
+ yp_bind F
+ yp_first F
+ yp_get_default_domain F
+ yp_maplist F
+ yp_master F
+ yp_match F
+ yp_next F
+ yp_order F
+ yp_unbind F
+ yp_update F
+ ypbinderr_string F
+ yperr_string F
+ ypprot_err F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist
new file mode 100644
index 000000000..552031263
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist
@@ -0,0 +1,228 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ _IO_flockfile F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ __close F
+ __connect F
+ __errno_location F
+ __fcntl F
+ __fork F
+ __h_errno_location F
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __lseek F
+ __nanosleep F
+ __open F
+ __open64 F
+ __pread64 F
+ __pthread_cleanup_routine F
+ __pthread_getspecific F
+ __pthread_key_create F
+ __pthread_mutex_destroy F
+ __pthread_mutex_init F
+ __pthread_mutex_lock F
+ __pthread_mutex_trylock F
+ __pthread_mutex_unlock F
+ __pthread_mutexattr_destroy F
+ __pthread_mutexattr_init F
+ __pthread_mutexattr_settype F
+ __pthread_once F
+ __pthread_register_cancel F
+ __pthread_register_cancel_defer F
+ __pthread_rwlock_destroy F
+ __pthread_rwlock_init F
+ __pthread_rwlock_rdlock F
+ __pthread_rwlock_tryrdlock F
+ __pthread_rwlock_trywrlock F
+ __pthread_rwlock_unlock F
+ __pthread_rwlock_wrlock F
+ __pthread_setspecific F
+ __pthread_unregister_cancel F
+ __pthread_unregister_cancel_restore F
+ __pthread_unwind_next F
+ __pwrite64 F
+ __read F
+ __res_state F
+ __send F
+ __sigaction F
+ __vfork F
+ __wait F
+ __write F
+ _pthread_cleanup_pop F
+ _pthread_cleanup_pop_restore F
+ _pthread_cleanup_push F
+ _pthread_cleanup_push_defer F
+ accept F
+ close F
+ connect F
+ fcntl F
+ flockfile F
+ fork F
+ fsync F
+ ftrylockfile F
+ funlockfile F
+ longjmp F
+ lseek F
+ lseek64 F
+ msync F
+ nanosleep F
+ open F
+ open64 F
+ pause F
+ pread F
+ pread64 F
+ pthread_attr_destroy F
+ pthread_attr_getaffinity_np F
+ pthread_attr_getdetachstate F
+ pthread_attr_getguardsize F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_getstack F
+ pthread_attr_getstackaddr F
+ pthread_attr_getstacksize F
+ pthread_attr_init F
+ pthread_attr_setaffinity_np F
+ pthread_attr_setdetachstate F
+ pthread_attr_setguardsize F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_attr_setstack F
+ pthread_attr_setstackaddr F
+ pthread_attr_setstacksize F
+ pthread_barrier_destroy F
+ pthread_barrier_init F
+ pthread_barrier_wait F
+ pthread_barrierattr_destroy F
+ pthread_barrierattr_getpshared F
+ pthread_barrierattr_init F
+ pthread_barrierattr_setpshared F
+ pthread_cancel F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_getclock F
+ pthread_condattr_getpshared F
+ pthread_condattr_init F
+ pthread_condattr_setclock F
+ pthread_condattr_setpshared F
+ pthread_create F
+ pthread_detach F
+ pthread_equal F
+ pthread_exit F
+ pthread_getaffinity_np F
+ pthread_getattr_np F
+ pthread_getconcurrency F
+ pthread_getcpuclockid F
+ pthread_getname_np F
+ pthread_getschedparam F
+ pthread_getspecific F
+ pthread_join F
+ pthread_key_create F
+ pthread_key_delete F
+ pthread_kill F
+ pthread_kill_other_threads_np F
+ pthread_mutex_consistent F
+ pthread_mutex_consistent_np F
+ pthread_mutex_destroy F
+ pthread_mutex_getprioceiling F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_setprioceiling F
+ pthread_mutex_timedlock F
+ pthread_mutex_trylock F
+ pthread_mutex_unlock F
+ pthread_mutexattr_destroy F
+ pthread_mutexattr_getkind_np F
+ pthread_mutexattr_getprioceiling F
+ pthread_mutexattr_getprotocol F
+ pthread_mutexattr_getpshared F
+ pthread_mutexattr_getrobust F
+ pthread_mutexattr_getrobust_np F
+ pthread_mutexattr_gettype F
+ pthread_mutexattr_init F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_setprioceiling F
+ pthread_mutexattr_setprotocol F
+ pthread_mutexattr_setpshared F
+ pthread_mutexattr_setrobust F
+ pthread_mutexattr_setrobust_np F
+ pthread_mutexattr_settype F
+ pthread_once F
+ pthread_rwlock_destroy F
+ pthread_rwlock_init F
+ pthread_rwlock_rdlock F
+ pthread_rwlock_timedrdlock F
+ pthread_rwlock_timedwrlock F
+ pthread_rwlock_tryrdlock F
+ pthread_rwlock_trywrlock F
+ pthread_rwlock_unlock F
+ pthread_rwlock_wrlock F
+ pthread_rwlockattr_destroy F
+ pthread_rwlockattr_getkind_np F
+ pthread_rwlockattr_getpshared F
+ pthread_rwlockattr_init F
+ pthread_rwlockattr_setkind_np F
+ pthread_rwlockattr_setpshared F
+ pthread_self F
+ pthread_setaffinity_np F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setconcurrency F
+ pthread_setname_np F
+ pthread_setschedparam F
+ pthread_setschedprio F
+ pthread_setspecific F
+ pthread_sigmask F
+ pthread_sigqueue F
+ pthread_spin_destroy F
+ pthread_spin_init F
+ pthread_spin_lock F
+ pthread_spin_trylock F
+ pthread_spin_unlock F
+ pthread_testcancel F
+ pthread_timedjoin_np F
+ pthread_tryjoin_np F
+ pthread_yield F
+ pwrite F
+ pwrite64 F
+ raise F
+ read F
+ recv F
+ recvfrom F
+ recvmsg F
+ sem_close F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_open F
+ sem_post F
+ sem_timedwait F
+ sem_trywait F
+ sem_unlink F
+ sem_wait F
+ send F
+ sendmsg F
+ sendto F
+ sigaction F
+ siglongjmp F
+ sigwait F
+ system F
+ tcdrain F
+ vfork F
+ wait F
+ waitpid F
+ write F
+GLIBC_2.18
+ GLIBC_2.18 A
+ pthread_getattr_default_np F
+ pthread_setattr_default_np F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist
new file mode 100644
index 000000000..ed312c0e6
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist
@@ -0,0 +1,93 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ __b64_ntop F
+ __b64_pton F
+ __dn_comp F
+ __dn_count_labels F
+ __dn_expand F
+ __dn_skipname F
+ __fp_nquery F
+ __fp_query F
+ __fp_resstat F
+ __hostalias F
+ __loc_aton F
+ __loc_ntoa F
+ __p_cdname F
+ __p_cdnname F
+ __p_class F
+ __p_class_syms D 0xa8
+ __p_fqname F
+ __p_fqnname F
+ __p_option F
+ __p_query F
+ __p_rcode F
+ __p_secstodate F
+ __p_time F
+ __p_type F
+ __p_type_syms D 0x450
+ __putlong F
+ __putshort F
+ __res_close F
+ __res_dnok F
+ __res_hnok F
+ __res_hostalias F
+ __res_isourserver F
+ __res_mailok F
+ __res_mkquery F
+ __res_nameinquery F
+ __res_nmkquery F
+ __res_nquery F
+ __res_nquerydomain F
+ __res_nsearch F
+ __res_nsend F
+ __res_ownok F
+ __res_queriesmatch F
+ __res_query F
+ __res_querydomain F
+ __res_search F
+ __res_send F
+ __sym_ntop F
+ __sym_ntos F
+ __sym_ston F
+ _gethtbyaddr F
+ _gethtbyname F
+ _gethtbyname2 F
+ _gethtent F
+ _getlong F
+ _getshort F
+ _res_opcodes D 0x80
+ _sethtent F
+ inet_net_ntop F
+ inet_net_pton F
+ inet_neta F
+ ns_datetosecs F
+ ns_format_ttl F
+ ns_get16 F
+ ns_get32 F
+ ns_initparse F
+ ns_makecanon F
+ ns_msg_getflag F
+ ns_name_compress F
+ ns_name_ntol F
+ ns_name_ntop F
+ ns_name_pack F
+ ns_name_pton F
+ ns_name_rollback F
+ ns_name_skip F
+ ns_name_uncompress F
+ ns_name_unpack F
+ ns_parse_ttl F
+ ns_parserr F
+ ns_put16 F
+ ns_put32 F
+ ns_samedomain F
+ ns_samename F
+ ns_skiprr F
+ ns_sprintrr F
+ ns_sprintrrf F
+ ns_subdomain F
+ res_gethostbyaddr F
+ res_gethostbyname F
+ res_gethostbyname2 F
+ res_send_setqhook F
+ res_send_setrhook F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist
new file mode 100644
index 000000000..f89f83ea8
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist
@@ -0,0 +1,37 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ __mq_open_2 F
+ aio_cancel F
+ aio_cancel64 F
+ aio_error F
+ aio_error64 F
+ aio_fsync F
+ aio_fsync64 F
+ aio_init F
+ aio_read F
+ aio_read64 F
+ aio_return F
+ aio_return64 F
+ aio_suspend F
+ aio_suspend64 F
+ aio_write F
+ aio_write64 F
+ lio_listio F
+ lio_listio64 F
+ mq_close F
+ mq_getattr F
+ mq_notify F
+ mq_open F
+ mq_receive F
+ mq_send F
+ mq_setattr F
+ mq_timedreceive F
+ mq_timedsend F
+ mq_unlink F
+ shm_open F
+ shm_unlink F
+ timer_create F
+ timer_delete F
+ timer_getoverrun F
+ timer_gettime F
+ timer_settime F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist
new file mode 100644
index 000000000..52f8d0793
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist
@@ -0,0 +1,42 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ td_init F
+ td_log F
+ td_symbol_list F
+ td_ta_clear_event F
+ td_ta_delete F
+ td_ta_enable_stats F
+ td_ta_event_addr F
+ td_ta_event_getmsg F
+ td_ta_get_nthreads F
+ td_ta_get_ph F
+ td_ta_get_stats F
+ td_ta_map_id2thr F
+ td_ta_map_lwp2thr F
+ td_ta_new F
+ td_ta_reset_stats F
+ td_ta_set_event F
+ td_ta_setconcurrency F
+ td_ta_thr_iter F
+ td_ta_tsd_iter F
+ td_thr_clear_event F
+ td_thr_dbresume F
+ td_thr_dbsuspend F
+ td_thr_event_enable F
+ td_thr_event_getmsg F
+ td_thr_get_info F
+ td_thr_getfpregs F
+ td_thr_getgregs F
+ td_thr_getxregs F
+ td_thr_getxregsize F
+ td_thr_set_event F
+ td_thr_setfpregs F
+ td_thr_setgregs F
+ td_thr_setprio F
+ td_thr_setsigpending F
+ td_thr_setxregs F
+ td_thr_sigsetmask F
+ td_thr_tls_get_addr F
+ td_thr_tlsbase F
+ td_thr_tsd F
+ td_thr_validate F
diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist
new file mode 100644
index 000000000..7e75bb2ea
--- /dev/null
+++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist
@@ -0,0 +1,8 @@
+GLIBC_2.17
+ GLIBC_2.17 A
+ forkpty F
+ login F
+ login_tty F
+ logout F
+ logwtmp F
+ openpty F
diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h b/libc/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
deleted file mode 100644
index b563e98f0..000000000
--- a/libc/sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
- Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
- 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-/* Forward definition to avoid parse errors */
-struct ucontext;
-typedef struct ucontext ucontext_t;
-#include <features.h>
-#include <signal.h>
-
-/* We need the signal context definitions even if they are not used
- included in <signal.h>. */
-#include <bits/sigcontext.h>
-
-/* Type for a program status word. */
-typedef struct
-{
- unsigned long mask;
- unsigned long addr;
-} __attribute__ ((__aligned__(8))) __psw_t;
-
-/* Type for a general-purpose register. */
-typedef unsigned long greg_t;
-
-/* And the whole bunch of them. We should have used `struct s390_regs',
- but to avoid name space pollution and since the tradition says that
- the register set is an array, we make gregset_t a simple array
- that has the same size as s390_regs. This is needed for the
- elf_prstatus structure. */
-#if __WORDSIZE == 64
-# define NGREG 27
-#else
-# define NGREG 36
-#endif
-/* Must match kernels psw_t alignment. */
-typedef greg_t gregset_t[NGREG] __attribute__ ((__aligned__(8)));
-
-typedef union
- {
- double d;
- float f;
- } fpreg_t;
-
-/* Register set for the floating-point registers. */
-typedef struct
- {
- unsigned int fpc;
- fpreg_t fprs[16];
- } fpregset_t;
-
-/* Bit 0 is reserved for the uc_high_gprs field only available in the
- 32 bit version of ucontext_t. This bit will never be set for 64
- bit. */
-#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
-
-/* A new uc_flags constant will be defined when actually making use of
- the reserved space: UCONTEXT_UCFLAGS_RESERVED (1UL << 1). */
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- __psw_t psw;
- unsigned long gregs[16];
- unsigned int aregs[16];
- fpregset_t fpregs;
- } mcontext_t;
-
-/* Userlevel context. */
-struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- __sigset_t uc_sigmask;
- char reserved[512];
- };
-
-
-#endif /* sys/ucontext.h */
diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h b/libc/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
index 90adc2d1f..f04bf849d 100644
--- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h
+++ b/libc/sysdeps/unix/sysv/linux/s390/sys/ucontext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
This file is part of the GNU C Library.
@@ -65,7 +65,9 @@ typedef struct
} fpregset_t;
/* Bit is set if the uc_high_gprs field contains the upper halfs of
- the 64 bit general purpose registers. */
+ the 64 bit general purpose registers. Since the uc_high_gprs field
+ is only available in the 32 bit version of ucontext_t it will never
+ be set for 64 bit. */
#define UCONTEXT_UC_FLAGS_HIGH_GPRS (1UL << 0)
/* A new uc_flags constant will be defined when actually making use of
@@ -88,7 +90,9 @@ struct ucontext
stack_t uc_stack;
mcontext_t uc_mcontext;
__sigset_t uc_sigmask;
+#ifndef __s390x__
unsigned long uc_high_gprs[16];
+#endif
char __reserved[512];
};
diff --git a/libc/sysdeps/unix/sysv/linux/sh/sh3/sys/ucontext.h b/libc/sysdeps/unix/sysv/linux/sh/sh3/sys/ucontext.h
deleted file mode 100644
index fe06b074e..000000000
--- a/libc/sysdeps/unix/sysv/linux/sh/sh3/sys/ucontext.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright (C) 1999-2014 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
- <http://www.gnu.org/licenses/>. */
-
-/* Where is System V/SH ABI? */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-
-#include <features.h>
-#include <signal.h>
-
-/* We need the signal context definitions even if they are not used
- included in <signal.h>. */
-#include <bits/sigcontext.h>
-
-
-typedef int greg_t;
-
-/* Number of general registers. */
-#define NFPREG 16
-
-/* Container for all general registers. */
-typedef greg_t gregset_t[NFPREG];
-
-#ifdef __USE_GNU
-/* Number of each register is the `gregset_t' array. */
-enum
-{
- R0 = 0,
-#define R0 R0
- R1 = 1,
-#define R1 R1
- R2 = 2,
-#define R2 R2
- R3 = 3,
-#define R3 R3
- R4 = 4,
-#define R4 R4
- R5 = 5,
-#define R5 R5
- R6 = 6,
-#define R6 R6
- R7 = 7,
-#define R7 R7
- R8 = 8,
-#define R8 R8
- R9 = 9,
-#define R9 R9
- R10 = 10,
-#define R10 R10
- R11 = 11,
-#define R11 R11
- R12 = 12,
-#define R12 R12
- R13 = 13,
-#define R13 R13
- R14 = 14,
-#define R14 R14
- R15 = 15,
-#define R15 R15
-};
-#endif
-
-/* Context to describe whole processor state. */
-typedef struct
- {
- unsigned int oldmask;
- gregset_t gregs;
- unsigned int pc;
- unsigned int pr;
- unsigned int sr;
- unsigned int gbr;
- unsigned int mach;
- unsigned int macl;
- } mcontext_t;
-
-/* Userlevel context. */
-typedef struct ucontext
- {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- __sigset_t uc_sigmask;
- } ucontext_t;
-
-#endif /* sys/ucontext.h */
diff --git a/libc/sysdeps/unix/sysv/linux/sh/sh4/sys/ucontext.h b/libc/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
index 799b2775e..2fb4d5d52 100644
--- a/libc/sysdeps/unix/sysv/linux/sh/sh4/sys/ucontext.h
+++ b/libc/sysdeps/unix/sysv/linux/sh/sys/ucontext.h
@@ -31,10 +31,10 @@
typedef int greg_t;
/* Number of general registers. */
-#define NFPREG 16
+#define NGPREG 16
/* Container for all general registers. */
-typedef greg_t gregset_t[NFPREG];
+typedef greg_t gregset_t[NGPREG];
#ifdef __USE_GNU
/* Number of each register is the `gregset_t' array. */
@@ -75,6 +75,7 @@ enum
};
#endif
+#if (defined(__SH4__) || defined(__SH4A__))
typedef int freg_t;
/* Number of FPU registers. */
@@ -100,6 +101,20 @@ typedef struct
unsigned int fpul;
unsigned int ownedfp;
} mcontext_t;
+#else
+/* Context to describe whole processor state. */
+typedef struct
+ {
+ unsigned int oldmask;
+ gregset_t gregs;
+ unsigned int pc;
+ unsigned int pr;
+ unsigned int sr;
+ unsigned int gbr;
+ unsigned int mach;
+ unsigned int macl;
+ } mcontext_t;
+#endif /* __SH_FPU_ANY__ */
/* Userlevel context. */
typedef struct ucontext
diff --git a/libc/sysdeps/x86/fpu/bits/mathinline.h b/libc/sysdeps/x86/fpu/bits/mathinline.h
index acc82ca27..b4b28f30f 100644
--- a/libc/sysdeps/x86/fpu/bits/mathinline.h
+++ b/libc/sysdeps/x86/fpu/bits/mathinline.h
@@ -384,7 +384,7 @@ __END_NAMESPACE_C99
# endif
#endif
-#ifndef __x86_64__
+#ifndef __SSE2_MATH__
# if ((!defined __NO_MATH_INLINES || defined __LIBC_INTERNAL_MATH_INLINES) \
&& defined __OPTIMIZE__)
@@ -970,4 +970,4 @@ __inline_mathcode2 (__ieee754_atan2, __y, __x,
return __value;)
# endif
-#endif /* !__x86_64__ */
+#endif /* !__SSE2_MATH__ */
diff --git a/libc/sysdeps/x86_64/fpu/libm-test-ulps b/libc/sysdeps/x86_64/fpu/libm-test-ulps
index 91e24173c..207b6c063 100644
--- a/libc/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/libc/sysdeps/x86_64/fpu/libm-test-ulps
@@ -108,6 +108,9 @@ ldouble: 1
Test "acos_upward (0xf.fffffffffffffffp-4)":
ildouble: 1
ldouble: 1
+Test "acos_upward (0xf.fffffp-4)":
+ildouble: 1
+ldouble: 1
# acosh
Test "acosh (0x6.4p+4)":
@@ -367,6 +370,9 @@ float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "atanh (0x4p-12)":
+ildouble: 1
+ldouble: 1
Test "atanh (0x4p-4)":
ildouble: 1
ldouble: 1
@@ -524,9 +530,13 @@ ldouble: 1
Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
@@ -783,6 +793,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cacos (-0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: cacos (-0x1p-23 + 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -803,6 +816,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cacos (-0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: cacos (-0x1p-23 - 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -879,6 +895,8 @@ ldouble: 1
Test "Imaginary part of: cacos (-1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (-1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -893,6 +911,8 @@ ldouble: 1
Test "Imaginary part of: cacos (-1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -1067,12 +1087,16 @@ ldouble: 1
Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)":
ildouble: 1
ldouble: 1
Test "Imaginary part of: cacos (0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
@@ -1265,6 +1289,9 @@ idouble: 1
Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Imaginary part of: cacos (0x1.fp16383 + 0x1.fp16383 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)":
float: 1
ifloat: 1
@@ -1285,6 +1312,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cacos (0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0x1p-23 - 0.5 i)":
float: 1
ifloat: 1
@@ -1293,6 +1323,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: cacos (0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)":
float: 1
ifloat: 1
@@ -1338,6 +1371,8 @@ ldouble: 1
Test "Imaginary part of: cacos (1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -1360,6 +1395,8 @@ ldouble: 1
Test "Imaginary part of: cacos (1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacos (1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -1536,9 +1573,13 @@ ifloat: 1
Test "Real part of: cacosh (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
@@ -1795,6 +1836,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (-0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (-0x1p-23 + 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -1815,6 +1859,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (-0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (-0x1p-23 - 0x1.fp-129 i)":
float: 1
ifloat: 1
@@ -1891,6 +1938,8 @@ ldouble: 1
Test "Real part of: cacosh (-1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (-1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -1905,6 +1954,8 @@ ldouble: 1
Test "Real part of: cacosh (-1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -2076,12 +2127,16 @@ ldouble: 1
Test "Real part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (0x0.fffffffffffff8p0 + 0x1p-52 i)":
ildouble: 1
ldouble: 1
Test "Real part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (0x0.fffffffffffff8p0 - 0x1p-52 i)":
ildouble: 1
ldouble: 1
@@ -2277,6 +2332,9 @@ idouble: 1
Test "Real part of: cacosh (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Real part of: cacosh (0x1.fp16383 + 0x1.fp16383 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (0x1p-105 + 0.5 i)":
float: 1
ifloat: 1
@@ -2297,6 +2355,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (0x1p-23 - 0.5 i)":
float: 1
ifloat: 1
@@ -2305,6 +2366,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: cacosh (0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: cacosh (0x1p-52 + 0.5 i)":
float: 1
ifloat: 1
@@ -2345,6 +2409,8 @@ ifloat: 1
Test "Real part of: cacosh (1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)":
float: 2
ifloat: 2
@@ -2367,6 +2433,8 @@ ifloat: 1
Test "Real part of: cacosh (1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)":
float: 2
ifloat: 2
@@ -2544,9 +2612,13 @@ ldouble: 1
Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
@@ -2611,28 +2683,52 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: casin (-0x1.fp-100 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-100 + 1.0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casin (-0x1.fp-100 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casin (-0x1.fp-1000 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)":
double: 1
idouble: 1
+Test "Real part of: casin (-0x1.fp-1000 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)":
double: 1
idouble: 1
+Test "Real part of: casin (-0x1.fp-10000 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (-0x1.fp-10000 - 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (-0x1.fp-1025 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)":
double: 1
idouble: 1
Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)":
double: 1
idouble: 1
+Test "Real part of: casin (-0x1.fp-1025 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)":
double: 1
idouble: 1
@@ -2651,6 +2747,9 @@ ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-129 + 0x1p-23 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casin (-0x1.fp-129 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)":
double: 1
float: 1
@@ -2671,6 +2770,9 @@ ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-129 - 0x1p-23 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casin (-0x1.fp-129 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)":
double: 1
float: 1
@@ -2735,6 +2837,9 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casin (-0x1p-23 - 0.5 i)":
double: 1
float: 1
@@ -2753,6 +2858,9 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (-0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)":
float: 1
ifloat: 1
@@ -2807,6 +2915,8 @@ ldouble: 1
Test "Imaginary part of: casin (-1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -2826,6 +2936,8 @@ ldouble: 1
Test "Imaginary part of: casin (-1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (-1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -2960,9 +3072,13 @@ ldouble: 1
Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)":
ildouble: 1
ldouble: 1
@@ -3027,28 +3143,52 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: casin (0x1.fp-100 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-100 + 1.0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casin (0x1.fp-100 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Real part of: casin (0x1.fp-1000 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)":
double: 1
idouble: 1
+Test "Real part of: casin (0x1.fp-1000 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)":
double: 1
idouble: 1
+Test "Real part of: casin (0x1.fp-10000 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (0x1.fp-10000 - 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: casin (0x1.fp-1025 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)":
double: 1
idouble: 1
Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)":
double: 1
idouble: 1
+Test "Real part of: casin (0x1.fp-1025 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)":
double: 1
idouble: 1
@@ -3067,6 +3207,9 @@ ldouble: 1
Test "Imaginary part of: casin (0x1.fp-129 + 0x1p-23 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casin (0x1.fp-129 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)":
double: 1
float: 1
@@ -3087,6 +3230,9 @@ ldouble: 1
Test "Imaginary part of: casin (0x1.fp-129 - 0x1p-23 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casin (0x1.fp-129 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)":
double: 1
float: 1
@@ -3127,6 +3273,9 @@ idouble: 1
Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casin (0x1.fp16383 + 0x1.fp16383 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1p-105 + 0.5 i)":
float: 1
ifloat: 1
@@ -3157,6 +3306,9 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 + 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casin (0x1p-23 - 0.5 i)":
double: 1
float: 1
@@ -3175,6 +3327,9 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casin (0x1p-23 - 0x1.000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (0x1p-52 + 0.5 i)":
float: 1
ifloat: 1
@@ -3229,6 +3384,8 @@ ldouble: 1
Test "Imaginary part of: casin (1.0 + 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (1.0 + 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -3248,6 +3405,8 @@ ldouble: 1
Test "Imaginary part of: casin (1.0 - 0x1.fp-10 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casin (1.0 - 0x1.fp-30 i)":
ildouble: 1
ldouble: 1
@@ -3430,6 +3589,9 @@ ldouble: 1
Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1.fp-129 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (-0x1.000002p0 + 0x1p-23 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)":
double: 1
float: 1
@@ -3444,6 +3606,9 @@ ldouble: 1
Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1.fp-129 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (-0x1.000002p0 - 0x1p-23 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)":
double: 1
float: 1
@@ -3452,9 +3617,13 @@ ifloat: 1
Test "Real part of: casinh (-0x1.fp-10 + 1.0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-0x1.fp-10 - 1.0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-0x1.fp-1025 + 0.5 i)":
ildouble: 1
ldouble: 1
@@ -3567,6 +3736,8 @@ ldouble: 1
Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-0x1p-52 + 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
@@ -3576,6 +3747,8 @@ ldouble: 1
Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-0x1p-52 - 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
@@ -3622,17 +3795,32 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-100 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-10000 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 + 0x1.fp-1025 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-1025 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (-1.0 + 0x1.fp-129 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)":
double: 1
float: 1
@@ -3674,17 +3862,32 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-100 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-10000 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 - 0x1.fp-1025 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-1025 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (-1.0 - 0x1.fp-129 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)":
double: 1
float: 1
@@ -3867,6 +4070,9 @@ ldouble: 1
Test "Imaginary part of: casinh (0x1.000002p0 + 0x1.fp-129 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (0x1.000002p0 + 0x1p-23 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)":
double: 1
float: 1
@@ -3881,6 +4087,9 @@ ldouble: 1
Test "Imaginary part of: casinh (0x1.000002p0 - 0x1.fp-129 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: casinh (0x1.000002p0 - 0x1p-23 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)":
double: 1
float: 1
@@ -3889,9 +4098,13 @@ ifloat: 1
Test "Real part of: casinh (0x1.fp-10 + 1.0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (0x1.fp-10 - 1.0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (0x1.fp-1025 + 0.5 i)":
ildouble: 1
ldouble: 1
@@ -3956,6 +4169,9 @@ idouble: 1
Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i)":
double: 1
idouble: 1
+Test "Real part of: casinh (0x1.fp16383 + 0x1.fp16383 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (0x1p-105 + 0.5 i)":
double: 1
idouble: 1
@@ -4010,6 +4226,8 @@ ldouble: 1
Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (0x1p-52 + 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
@@ -4019,6 +4237,8 @@ ldouble: 1
Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (0x1p-52 - 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
@@ -4065,17 +4285,32 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-100 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-10000 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 + 0x1.fp-1025 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-1025 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 + 0x1.fp-129 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (1.0 + 0x1.fp-129 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 + 0x1.fp-30 i)":
double: 1
float: 1
@@ -4117,17 +4352,32 @@ double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-100 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-10000 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 - 0x1.fp-1025 i)":
double: 1
idouble: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-1025 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 - 0x1.fp-129 i)":
double: 1
float: 1
idouble: 1
ifloat: 1
+Test "Imaginary part of: casinh (1.0 - 0x1.fp-129 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: casinh (1.0 - 0x1.fp-30 i)":
double: 1
float: 1
@@ -4175,6 +4425,8 @@ ldouble: 1
Test "Imaginary part of: catan (-0x1.0000000000001p0 - 0x1p-27 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (-0x1.000002p0 + 0x1p-126 i)":
float: 1
ifloat: 1
@@ -4232,12 +4484,21 @@ ldouble: 1
Test "Imaginary part of: catan (-0x1p-1022 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (-0x1p-13 + 0x0.ffffffp0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (-0x1p-13 + 0x1.000002p0 i)":
float: 1
ifloat: 1
Test "Real part of: catan (-0x1p-13 + 1.0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: catan (-0x1p-13 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (-0x1p-13 - 0x0.ffffffp0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (-0x1p-13 - 0x1.000002p0 i)":
float: 1
ifloat: 1
@@ -4253,12 +4514,27 @@ ldouble: 1
Test "Imaginary part of: catan (-0x1p-16382 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (-0x1p-27 - 0x0.fffffffffffff8p0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (-0x1p-27 - 0x1.0000000000001p0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (-0x1p-27 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (-0x1p-33 + 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (-0x1p-33 + 0x1.0000000000000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (-0x1p-33 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (-0x1p-33 - 0x1.0000000000000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (-0x1p-54 + 1.0 i)":
float: 1
ifloat: 1
@@ -4280,6 +4556,9 @@ ldouble: 1
Test "Real part of: catan (-1.0 + 0x1p-13 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: catan (-1.0 + 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (-1.0 + 0x1p-64 i)":
ildouble: 1
ldouble: 1
@@ -4289,6 +4568,9 @@ ifloat: 1
Test "Imaginary part of: catan (-1.0 - 0x1p-13 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (-1.0 - 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (-1.0 - 0x1p-64 i)":
ildouble: 1
ldouble: 1
@@ -4314,6 +4596,8 @@ ldouble: 1
Test "Imaginary part of: catan (0x1.0000000000001p0 - 0x1p-27 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (0x1.000002p0 + 0x1p-126 i)":
float: 1
ifloat: 1
@@ -4371,12 +4655,21 @@ ldouble: 1
Test "Imaginary part of: catan (0x1p-1022 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (0x1p-13 + 0x0.ffffffp0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (0x1p-13 + 0x1.000002p0 i)":
float: 1
ifloat: 1
Test "Real part of: catan (0x1p-13 + 1.0 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: catan (0x1p-13 + 1.0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (0x1p-13 - 0x0.ffffffp0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catan (0x1p-13 - 0x1.000002p0 i)":
float: 1
ifloat: 1
@@ -4392,12 +4685,27 @@ ldouble: 1
Test "Imaginary part of: catan (0x1p-16382 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (0x1p-27 - 0x0.fffffffffffff8p0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (0x1p-27 - 0x1.0000000000001p0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: catan (0x1p-27 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (0x1p-33 + 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (0x1p-33 + 0x1.0000000000000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (0x1p-33 - 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (0x1p-33 - 0x1.0000000000000002p0 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (0x1p-54 + 1.0 i)":
float: 1
ifloat: 1
@@ -4419,6 +4727,9 @@ ldouble: 1
Test "Real part of: catan (1.0 + 0x1p-13 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: catan (1.0 + 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (1.0 + 0x1p-64 i)":
ildouble: 1
ldouble: 1
@@ -4428,11 +4739,20 @@ ifloat: 1
Test "Imaginary part of: catan (1.0 - 0x1p-13 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: catan (1.0 - 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catan (1.0 - 0x1p-64 i)":
ildouble: 1
ldouble: 1
# catanh
+Test "Real part of: catanh (-0x0.fffffffffffff8p0 + 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x0.fffffffffffff8p0 - 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-1022 i)":
ildouble: 1
ldouble: 1
@@ -4451,6 +4771,24 @@ ldouble: 1
Test "Real part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-33 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (-0x0.ffffffp0 + 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x0.ffffffp0 - 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1.0000000000000002p0 + 0x1p-33 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1.0000000000000002p0 - 0x1p-33 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1.0000000000001p0 + 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1.0000000000001p0 - 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-0x1.000002p0 + 0x1p-13 i)":
float: 1
ifloat: 1
@@ -4516,9 +4854,19 @@ ifloat: 1
Test "Real part of: catanh (-0x1p-27 + 0x1.0000000000001p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1p-27 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-0x1p-27 - 0x1.0000000000001p0 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (-0x1p-27 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-0x1p-64 + 1.0 i)":
ildouble: 1
ldouble: 1
@@ -4536,6 +4884,9 @@ ldouble: 1
Test "Imaginary part of: catanh (-1.0 + 0x1p-13 i)":
float: 1
ifloat: 1
+Test "Real part of: catanh (-1.0 + 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-1.0 + 0x1p-54 i)":
float: 1
ifloat: 1
@@ -4556,6 +4907,9 @@ ldouble: 1
Test "Imaginary part of: catanh (-1.0 - 0x1p-13 i)":
float: 1
ifloat: 1
+Test "Real part of: catanh (-1.0 - 0x1p-27 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (-1.0 - 0x1p-54 i)":
float: 1
ifloat: 1
@@ -4589,6 +4943,18 @@ ldouble: 1
Test "Real part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-33 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (0x0.ffffffp0 + 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (0x0.ffffffp0 - 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (0x1.0000000000000002p0 + 0x1p-33 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: catanh (0x1.0000000000000002p0 - 0x1p-33 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catanh (0x1.000002p0 + 0x1p-13 i)":
float: 1
ifloat: 1
@@ -4649,12 +5015,18 @@ idouble: 1
Test "Real part of: catanh (0x1p-27 + 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (0x1p-27 + 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (0x1p-27 - 0x0.fffffffffffff8p0 i)":
double: 1
idouble: 1
Test "Real part of: catanh (0x1p-27 - 0x1.0000000000001p0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (0x1p-27 - 1.0 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: catanh (0x1p-33 + 0x0.ffffffffffffffffp0 i)":
ildouble: 1
ldouble: 1
@@ -4675,6 +5047,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (1.0 + 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catanh (1.0 + 0x1p-13 i)":
float: 1
ifloat: 1
@@ -4695,6 +5070,9 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: catanh (1.0 - 0x1p-13 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: catanh (1.0 - 0x1p-13 i)":
float: 1
ifloat: 1
@@ -4743,6 +5121,9 @@ idouble: 1
Test "Imaginary part of: ccos (-0xcp-4 - 0x5.98p+4 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: ccos (0x1p-120 + 0x8p-32 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: ccos (0x4p-1076 + 0x5.ap+8 i)":
double: 1
idouble: 1
@@ -4810,6 +5191,9 @@ ifloat: 1
Test "Imaginary part of: ccosh (0x5.ap+8 + 0x4p-1076 i)":
double: 1
idouble: 1
+Test "Imaginary part of: ccosh (0x8p-32 + 0x1p-120 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: ccosh (0xcp-4 + 0x1.4p+0 i)":
double: 1
float: 1
@@ -4920,6 +5304,11 @@ idouble: 1
Test "Real part of: clog (-0x1.000002p+0 + +0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1.000002p+0 + 0x1.2345678p-1000 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (-0x1.000002p+0 + 0x4.8d1598p-32 i)":
double: 1
float: 1
@@ -4938,9 +5327,17 @@ ldouble: 1
Test "Real part of: clog (-0x1.000002p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (-0x1.234566p-40 - 0x1p+0 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (-0x1p+0 + 0x4.8d1598p-32 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (-0x1p+0 + 0x4.8d159ep-32 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (-0x1p+0 + 0x4.8d15ap-32 i)":
ildouble: 1
ldouble: 1
@@ -5069,15 +5466,29 @@ idouble: 1
Test "Real part of: clog (0x1.000002p+0 + +0 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.000002p+0 + 0x1.234566p-60 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.23456789p-1000 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.000002p+0 + 0x1.23456789p-60 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.000002p+0 + 0x1.234568p-60 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.000002p+0 + 0x8p-152 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.000566p+0 + 0x4.8dp-12 i)":
float: 1
ifloat: 1
@@ -5086,6 +5497,8 @@ ldouble: 1
Test "Real part of: clog (0x1.48e45e3268d8p-4 + 0xf.f2c64p-4 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c63p-4 i)":
float: 1
ifloat: 1
@@ -5101,6 +5514,12 @@ ldouble: 1
Test "Real part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed1990460bep-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7cp-4 + 0xf.ed19ap-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdfbf6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.8907bc3694fd4e7ep-4 + 0xf.ed1990460bdfbf7p-4 i)":
ildouble: 1
ldouble: 1
@@ -5122,6 +5541,9 @@ idouble: 1
Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdfbf6p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed199p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdf8p-4 i)":
ildouble: 1
ldouble: 1
@@ -5131,9 +5553,15 @@ ldouble: 1
Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bdfbf7p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.8907bcp-4 + 0xf.ed1990460bep-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.8907bep-4 + 0xf.ed1990460bdfbf6p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.8907bep-4 + 0xf.ed1990460bdfbf7p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e08p-4 i)":
double: 1
idouble: 1
@@ -5143,6 +5571,8 @@ ldouble: 1
Test "Real part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e1p-4 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4dp-4 i)":
ildouble: 1
ldouble: 1
@@ -5183,18 +5613,27 @@ ldouble: 1
Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4d1d7a6e1p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4dp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1.c67ecd92a8595p-4 + 0xf.e6b4ep-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4d1d7a6e1p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x1.c67ecep-4 + 0xf.e6b4ep-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x1p+0 + 0x4.8d1598p-12 i)":
float: 1
ifloat: 1
Test "Real part of: clog (0x1p-16440 + +0 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2.0ce7ba1e4902p-4 + 0xf.de3a3p-4 i)":
double: 1
idouble: 1
@@ -5215,6 +5654,9 @@ ldouble: 1
Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x2.82b794p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42a15bf9a3613p-4 i)":
ildouble: 1
ldouble: 1
@@ -5224,12 +5666,18 @@ ldouble: 1
Test "Real part of: clog (0x2.82b795e420b281a8p-4 + 0xf.cd42bp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3612p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a3613p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42a15bf9a38p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b281acp-4 + 0xf.cd42ap-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42a15bf9a3612p-4 i)":
ildouble: 1
ldouble: 1
@@ -5239,24 +5687,54 @@ idouble: 1
Test "Imaginary part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x2.82b795e420b28p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42ap-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x2.82b798p-4 + 0xf.cd42a15bf9a3613p-4 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0x2.82b798p-4 + 0xf.cd42bp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x2p-148 + 0x2p-148 i)":
float: 1
ifloat: 1
Test "Real part of: clog (0x3.2cdb84p-4 + 0xf.ae888f0455f6p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.2cdb855bcb8d8p-4 + 0xf.ae889p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.2cdb88p-4 + 0xf.ae888p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8dcp-4 + 0xf.ab873d09e61ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab873d09e61e797p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276aa8ep-4 + 0xf.ab873d09e61e8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873d09e61e797p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x3.3b8f9163276aap-4 + 0xf.ab873p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.3b8f9163276acp-4 + 0xf.ab874p-4 i)":
ildouble: 1
ldouble: 1
@@ -5277,6 +5755,9 @@ float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.3b8f9p-4 + 0xf.ab873p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.6e17119fb8aaap-4 + 0xf.a0c58a83e57c772p-4 i)":
ildouble: 1
ldouble: 1
@@ -5303,12 +5784,17 @@ ldouble: 1
Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c772p-4 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c773p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57c8p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58a83e57cp-4 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c58p-4 i)":
float: 1
ifloat: 1
@@ -5318,12 +5804,17 @@ ifloat: 1
Test "Real part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x3.6e1714p-4 + 0xf.a0c59p-4 i)":
float: 1
ifloat: 1
Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57c773p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58a83e57cp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.6e171p-4 + 0xf.a0c58p-4 i)":
ildouble: 1
ldouble: 1
@@ -5339,15 +5830,33 @@ idouble: 1
Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d619a8d11bfdp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.bea2bcp-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d7p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d619a8d11bfep-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x3.bea2bd62e3501174p-4 + 0xf.8e3d7p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d619a8d11bfdp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.bea2bd62e350117p-4 + 0xf.8e3d7p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d619a8d11bfep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x3.bea2bd62e3502p-4 + 0xf.8e3d6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.bea2bd62e35p-4 + 0xf.8e3d6p-4 i)":
double: 1
idouble: 1
@@ -5363,6 +5872,9 @@ ifloat: 1
Test "Real part of: clog (0x3.bea2cp-4 + 0xf.8e3d7p-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d005dp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)":
double: 1
idouble: 1
@@ -5381,6 +5893,9 @@ ldouble: 1
Test "Imaginary part of: clog (0x3.e1d0a105ac4ecp-4 + 0xf.859b3d1b06d005ep-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d005ep-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x3.e1d0a4p-4 + 0xf.859b3d1b06d08p-4 i)":
ildouble: 1
ldouble: 1
@@ -5408,6 +5923,9 @@ ldouble: 1
Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1af8e3cfp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x4.0dbf78p-4 + 0xf.7a5c1p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x4.0dbf7d40fe1acp-4 + 0xf.7a5c1af8e3ce8p-4 i)":
double: 1
idouble: 1
@@ -5425,6 +5943,9 @@ ldouble: 1
Test "Real part of: clog (0x4.0dbf7d40fe1bp-4 + 0xf.7a5c2p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3ce8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x4.0dbf8p-4 + 0xf.7a5c1af8e3cfp-4 i)":
ildouble: 1
ldouble: 1
@@ -5434,18 +5955,27 @@ ldouble: 1
Test "Imaginary part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a550c9d75e3bp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x4.7017a2e368078p-4 + 0xf.5f4a6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a550c9d758p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a550c9d75e3bp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x4.7017a2e36807acb8p-4 + 0xf.5f4a6p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d75e3bp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a550c9d76p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x4.7017a2e36807acbp-4 + 0xf.5f4a5p-4 i)":
ildouble: 1
ldouble: 1
@@ -5470,6 +6000,18 @@ idouble: 1
Test "Real part of: clog (0x4.7017a8p-4 + 0xf.5f4a6p-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3cp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.7017ap-4 + 0xf.5f4a5p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x4.8d1598p-32 + 0x1p+0 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x4.d9e8c415d5644p-4 + 0xf.3f30281507d8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x4.d9e8c415d5644p-4 + 0xf.3f302p-4 i)":
ildouble: 1
ldouble: 1
@@ -5508,12 +6050,18 @@ ldouble: 1
Test "Real part of: clog (0x5.318c596a8cb114ep-4 + 0xf.22364p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x5.318c596a8cb14p-4 + 0xf.22363bf989d98p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22363bf989dap-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x5.318c596a8cb1p-4 + 0xf.22364p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x5.b06b680ea2ccp-4 + 0xe.f452bp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x5.b06b68p-4 + 0xe.f452b965da9fp-4 i)":
double: 1
idouble: 1
@@ -5534,6 +6082,9 @@ ldouble: 1
Test "Real part of: clog (0x5.ba8ce4b6p-4 + 0xe.f0742508p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x5.ba8ce8p-4 + 0xe.f0743p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x5.ba8cep-4 + 0xe.f0742p-4 i)":
ildouble: 1
ldouble: 1
@@ -5543,9 +6094,15 @@ ldouble: 1
Test "Real part of: clog (0x6.02fd5037c4794p-4 + 0xe.d3e21p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c4794p-4 + 0xe.d3e2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2086dcca80b8p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e2086dcca8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.02fd5037c479p-4 + 0xe.d3e21p-4 i)":
double: 1
idouble: 1
@@ -5563,6 +6120,11 @@ idouble: 1
Test "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x6.02fd5p-4 + 0xe.d3e2086dcca80b8p-4 i)":
ildouble: 1
ldouble: 1
@@ -5575,18 +6137,30 @@ ldouble: 1
Test "Real part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2018b4288p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2018b428258p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c2018b4288p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x6.1c643068cd125ef8p-4 + 0xe.c97c3p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125efp-4 + 0xe.c97c2018b428257p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.1c643068cd125efp-4 + 0xe.c97c2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.1c643068cd125efp-4 + 0xe.c97c3p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x6.1c643068cd128p-4 + 0xe.c97c2p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b428257p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.1c6438p-4 + 0xe.c97c2018b4288p-4 i)":
double: 1
idouble: 1
@@ -5642,6 +6216,12 @@ idouble: 1
Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86ba8p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a599a86baf8fp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x6.2aff88p-4 + 0xe.c36a6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.2aff8p-4 + 0xe.c36a599a86baf8fp-4 i)":
ildouble: 1
ldouble: 1
@@ -5666,6 +6246,9 @@ ldouble: 1
Test "Real part of: clog (0x6.b10b4f3520217b6p-4 + 0xe.8893cp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb449258p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x6.b10b4f3520218p-4 + 0xe.8893cbb44925p-4 i)":
ildouble: 1
ldouble: 1
@@ -5693,21 +6276,41 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x7.eca921b40e02ae18p-4 + 0xd.e655fp-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655e694e511p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca921b40e02ae1p-4 + 0xd.e655ep-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x7.eca921b40e02cp-4 + 0xd.e655e694e510a94p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e5108p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e510a95p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655e694e511p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x7.eca92p-4 + 0xd.e655e694e5108p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x7.eca92p-4 + 0xd.e655e694e510a95p-4 i)":
ildouble: 1
ldouble: 1
@@ -5773,12 +6376,21 @@ ldouble: 1
Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf04f3688p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bf1p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x7.f4b088p-4 + 0xd.e1bfp-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0x7.f4b08p-4 + 0xd.e1bf04f3688p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x8.88fae2eap-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x8.88faep-4 + 0xd.888bcp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x8.88faep-4 + 0xd.888bdp-4 i)":
float: 1
ifloat: 1
@@ -5798,12 +6410,21 @@ ldouble: 1
Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.479468b09a37p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x8.ecbf8p-4 + 0xd.47946p-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0x8.ecbf8p-4 + 0xd.47947p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)":
double: 1
idouble: 1
+Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.47946p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0x8.ecbf9p-4 + 0xd.47947p-4 i)":
ildouble: 1
ldouble: 1
@@ -5856,6 +6477,8 @@ ldouble: 1
Test "Real part of: clog (0x9.b386fp-4 + 0xc.b9317p-4 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x9.b387p-4 + 0xc.b9317c470b4085cp-4 i)":
ildouble: 1
ldouble: 1
@@ -5877,6 +6500,12 @@ ldouble: 1
Test "Real part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53de1d5a7c8p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a246bbp-4 + 0xc.ae53ep-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53de1d5a7dp-4 i)":
double: 1
idouble: 1
@@ -5894,6 +6523,15 @@ double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8bp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7c8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0x9.c1b6ap-4 + 0xc.ae53de1d5a7dp-4 i)":
double: 1
idouble: 1
@@ -5912,9 +6550,18 @@ ldouble: 1
Test "Imaginary part of: clog (0x9.c1b6bp-4 + 0xc.ae53de1d5a7c8p-4 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c199fp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c19ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.47c0c65bd4928p-4 + 0xc.42a51p-4 i)":
double: 1
idouble: 1
@@ -5933,6 +6580,9 @@ ldouble: 1
Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c19ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.47c0c65bd492c7fp-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0xa.47c0c65bd493p-4 + 0xc.42a51a3c05c18p-4 i)":
ildouble: 1
ldouble: 1
@@ -5942,9 +6592,14 @@ ldouble: 1
Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c19ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51a3c05c2p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0xa.47c0cp-4 + 0xc.42a51p-4 i)":
float: 1
ifloat: 1
@@ -5957,9 +6612,15 @@ ldouble: 1
Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e867932966df8p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342dfp-4 + 0xb.e8679p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df58ap-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867932966df8p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.afc57e2624342ep-4 + 0xb.e867ap-4 i)":
ildouble: 1
ldouble: 1
@@ -5975,6 +6636,9 @@ ldouble: 1
Test "Imaginary part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966df589p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.afc57e262434p-4 + 0xb.e867932966dfp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.afc57p-4 + 0xb.e867932966df589p-4 i)":
ildouble: 1
ldouble: 1
@@ -5996,6 +6660,9 @@ ldouble: 1
Test "Real part of: clog (0xa.afc58p-4 + 0xb.e8679p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)":
float: 1
ifloat: 1
@@ -6015,14 +6682,26 @@ float: 1
ifloat: 1
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.b96dbp-8 + 0xf.fc678p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51cbp-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xa.e7de8cc868ff8p-4 + 0xb.b51ccp-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.e7de8p-4 + 0xb.b51cb9f04d4dp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51cbp-4 i)":
float: 1
ifloat: 1
+Test "Real part of: clog (0xa.e7de8p-4 + 0xb.b51ccp-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.e7de9p-4 + 0xb.b51cb9f04d4dp-4 i)":
double: 1
idouble: 1
@@ -6035,12 +6714,21 @@ ldouble: 1
Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0xa.ec55b7682e528a1p-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e528ap-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f2405504a6p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.ec55b7682e528p-4 + 0xb.b0f24p-4 i)":
double: 1
idouble: 1
@@ -6059,17 +6747,29 @@ ldouble: 1
Test "Real part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f25p-4 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55b7682e53p-4 + 0xb.b0f25p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a68p-4 i)":
ildouble: 1
ldouble: 1
Test "Real part of: clog (0xa.ec55bp-4 + 0xb.b0f2405504a6p-4 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xa.ec55bp-4 + 0xb.b0f24p-4 i)":
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6058p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a68p-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xa.ec55cp-4 + 0xb.b0f2405504a6p-4 i)":
ildouble: 1
ldouble: 1
@@ -6079,6 +6779,11 @@ ifloat: 1
Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
+Test "Imaginary part of: clog (0xb.263a8p-4 + 0xb.79c9ap-4 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xb.263a8p-4 + 0xb.79c9bp-4 i)":
float: 1
ifloat: 1
@@ -6107,6 +6812,9 @@ ldouble: 1
Test "Real part of: clog (0xf.8p+16380 + 0x8p-16448 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog (0xf.8p+16380 + 0xf.8p+16380 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xf.8p+16380 + 0xf.ffffffffffff8p+1020 i)":
ildouble: 1
ldouble: 1
@@ -6128,6 +6836,9 @@ ldouble: 1
Test "Real part of: clog (0xf.ffffffffffff8p+1020 + 0xf.8p+16380 i)":
ildouble: 1
ldouble: 1
+Test "Imaginary part of: clog (0xf.ffffffffffff8p-4 + 0xf.fffffffffffffffp-15004 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xf.fffffffffffffffp-4 + +0 i)":
ildouble: 1
ldouble: 1
@@ -6163,6 +6874,9 @@ ifloat: 1
Test "Real part of: clog (0xf.fffffp-4 + 0x8p-152 i)":
float: 1
ifloat: 1
+Test "Imaginary part of: clog (0xf.fffffp-4 + 0xf.fffffffffffffffp-15004 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog (0xf.fffffp-4 + 0xf.fffffp-104 i)":
float: 1
ifloat: 1
@@ -6358,6 +7072,9 @@ ldouble: 1
Test "Real part of: clog10 (0x1.fp+16383 + 0x1.fp+16383 i)":
ildouble: 1
ldouble: 1
+Test "Real part of: clog10 (0x1.fp+16383 + 0x1p+16383 i)":
+ildouble: 1
+ldouble: 1
Test "Real part of: clog10 (0x1.fp+16383 + 0x1p-16445 i)":
ildouble: 1
ldouble: 1
@@ -6376,6 +7093,8 @@ idouble: 1
Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)":
double: 1
idouble: 1
+ildouble: 1
+ldouble: 1
Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i)":
double: 1
idouble: 1
@@ -7295,8 +8014,8 @@ float: 2
idouble: 1
ifloat: 2
Test "cosh_upward (0x1.6p+4)":
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "cosh_upward (0x1.8p+4)":
double: 1
idouble: 1
@@ -9756,6 +10475,9 @@ double: 1
idouble: 1
# expm1
+Test "expm1 (-0x1p-32)":
+ildouble: 1
+ldouble: 1
Test "expm1 (-0x1p-64)":
ildouble: 1
ldouble: 1
@@ -9778,6 +10500,9 @@ ldouble: 1
Test "expm1 (0x2.c5c4p+12)":
ildouble: 1
ldouble: 1
+Test "expm1 (0x8p-32)":
+ildouble: 1
+ldouble: 1
Test "expm1 (0xcp-4)":
double: 1
idouble: 1
@@ -9804,6 +10529,9 @@ ldouble: 1
Test "expm1_downward (-0x6.4p+4)":
ildouble: 1
ldouble: 1
+Test "expm1_downward (-0x8p-32)":
+ildouble: 1
+ldouble: 1
Test "expm1_downward (0x1.f4p+8)":
double: 1
idouble: 1
@@ -9839,6 +10567,9 @@ ildouble: 1
ldouble: 1
# expm1_tonearest
+Test "expm1_tonearest (-0x1p-32)":
+ildouble: 1
+ldouble: 1
Test "expm1_tonearest (-0x1p-64)":
ildouble: 1
ldouble: 1
@@ -9861,6 +10592,9 @@ ldouble: 1
Test "expm1_tonearest (0x2.c5c4p+12)":
ildouble: 1
ldouble: 1
+Test "expm1_tonearest (0x8p-32)":
+ildouble: 1
+ldouble: 1
Test "expm1_tonearest (0xcp-4)":
double: 1
idouble: 1
@@ -10644,9 +11378,15 @@ double: 1
idouble: 1
# log
+Test "log (0x2.b7e154p+0)":
+ildouble: 1
+ldouble: 1
Test "log (0x2.b7e15p+0)":
float: 1
ifloat: 1
+Test "log (0x5.e2d58d8b3bcdf1bp-4)":
+ildouble: 1
+ldouble: 1
Test "log (0x5.e2d59p-4)":
ildouble: 1
ldouble: 1
@@ -10673,6 +11413,9 @@ ifloat: 1
Test "log10 (0x4p-128)":
ildouble: 1
ldouble: 1
+Test "log10 (0x8p-972)":
+ildouble: 1
+ldouble: 1
Test "log10 (0xcp-4)":
double: 1
float: 2
@@ -10696,6 +11439,9 @@ ldouble: 1
Test "pow (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
+Test "pow (0x5.822b137da851af4p+16368, 0xcp-4)":
+ildouble: 1
+ldouble: 1
Test "pow (0xf.ffffffffffff8p-4, 0x4.8d15ap+60)":
ildouble: 1
ldouble: 1
@@ -10740,6 +11486,9 @@ ldouble: 1
Test "pow_tonearest (0x1.000002p+0, 0x1p+24)":
float: 1
ifloat: 1
+Test "pow_tonearest (0x5.822b137da851af4p+16368, 0xcp-4)":
+ildouble: 1
+ldouble: 1
Test "pow_tonearest (0xf.ffffffffffff8p-4, 0x4.8d15ap+60)":
ildouble: 1
ldouble: 1
@@ -11402,6 +12151,11 @@ Test "sincos (0xf.ffffffffffff8p+1020) extra output 1":
ildouble: 1
ldouble: 1
+# sinh
+Test "sinh (0x8p-32)":
+ildouble: 1
+ldouble: 1
+
# sinh_downward
Test "sinh_downward (0x1.6p+4)":
double: 1
@@ -11420,6 +12174,11 @@ Test "sinh_downward (0x8p-32)":
ildouble: 1
ldouble: 1
+# sinh_tonearest
+Test "sinh_tonearest (0x8p-32)":
+ildouble: 1
+ldouble: 1
+
# sinh_towardzero
Test "sinh_towardzero (0x1.6p+4)":
double: 1
@@ -11993,8 +12752,8 @@ double: 1
float: 1
idouble: 1
ifloat: 1
-ildouble: 1
-ldouble: 1
+ildouble: 2
+ldouble: 2
Test "tgamma (-0x1.f3fffep+8)":
ildouble: 1
ldouble: 1
@@ -13299,7 +14058,7 @@ double: 1
float: 2
idouble: 1
ifloat: 2
-ildouble: 1
+ildouble: 2
ldouble: 3
Function: Real part of "cpow":
@@ -13740,12 +14499,20 @@ Function: "sincos":
ildouble: 1
ldouble: 1
+Function: "sinh":
+ildouble: 1
+ldouble: 1
+
Function: "sinh_downward":
double: 1
idouble: 1
ildouble: 1
ldouble: 1
+Function: "sinh_tonearest":
+ildouble: 1
+ldouble: 1
+
Function: "sinh_towardzero":
double: 1
idouble: 1
diff --git a/libc/version.h b/libc/version.h
index c88ab1cfb..e39984957 100644
--- a/libc/version.h
+++ b/libc/version.h
@@ -1,4 +1,4 @@
/* This file just defines the current version number of libc. */
-#define RELEASE "development"
-#define VERSION "2.18.90"
+#define RELEASE "stable"
+#define VERSION "2.19"