diff options
author | Marcus Shawcroft <marcus.shawcroft@arm.com> | 2014-02-10 15:36:16 +0000 |
---|---|---|
committer | Marcus Shawcroft <marcus.shawcroft@arm.com> | 2014-02-11 11:36:00 +0000 |
commit | 75eff3fe90f96783f31f58fa84af1b77e57d1ae4 (patch) | |
tree | 28a8fda330f53de0eccd291f9c5e52a2056a983a /sysdeps | |
parent | d35f1e80730ce5afbd4694f2d2e537e4af32a797 (diff) | |
download | glibc-75eff3fe90f96783f31f58fa84af1b77e57d1ae4.tar glibc-75eff3fe90f96783f31f58fa84af1b77e57d1ae4.tar.gz glibc-75eff3fe90f96783f31f58fa84af1b77e57d1ae4.tar.bz2 glibc-75eff3fe90f96783f31f58fa84af1b77e57d1ae4.zip |
Relocate AArch64 from ports to libc.
This patch moves the AArch64 port to the main sysdeps hierarchy. The
move is essentially:
git mv ports/sysdeps/aarch64 sysdeps/aarch64
git mv ports/sysdeps/unix/sysv/linux/aarch64 sysdeps/unix/sysv/linux/aarch64
The README is updated and I've updated ChangeLog.aarch64 along the
lines of the ARM move. The AArch64 build has been tested to confirm
that there were no changes in objdump -dr output or the shared
objects.
Diffstat (limited to 'sysdeps')
173 files changed, 31795 insertions, 0 deletions
diff --git a/sysdeps/aarch64/Implies b/sysdeps/aarch64/Implies new file mode 100644 index 0000000000..e5adf4d63c --- /dev/null +++ b/sysdeps/aarch64/Implies @@ -0,0 +1,6 @@ +wordsize-64 +ieee754/ldbl-128 +ieee754/dbl-64/wordsize-64 +ieee754/dbl-64 +ieee754/flt-32 +aarch64/soft-fp diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile new file mode 100644 index 0000000000..5af7a1655e --- /dev/null +++ b/sysdeps/aarch64/Makefile @@ -0,0 +1,16 @@ +long-double-fcts = yes + +ifeq ($(subdir),debug) +CFLAGS-backtrace.c += -funwind-tables +endif + +ifeq ($(subdir),elf) +sysdep-dl-routines += tlsdesc dl-tlsdesc +sysdep_routines += tlsdesc dl-tlsdesc +sysdep-rtld-routines += tlsdesc dl-tlsdesc +gen-as-const-headers += dl-link.sym +endif + +ifeq ($(subdir),csu) +gen-as-const-headers += tlsdesc.sym +endif diff --git a/sysdeps/aarch64/Versions b/sysdeps/aarch64/Versions new file mode 100644 index 0000000000..e1aa44f33d --- /dev/null +++ b/sysdeps/aarch64/Versions @@ -0,0 +1,5 @@ +libc { + GLIBC_2.18 { + _mcount; + } +} diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S new file mode 100644 index 0000000000..2d38bbf6a5 --- /dev/null +++ b/sysdeps/aarch64/__longjmp.S @@ -0,0 +1,106 @@ +/* Copyright (C) 1997-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 <sysdep.h> +#include <jmpbuf-offsets.h> + +/* __longjmp(jmpbuf, val) */ + +ENTRY (__longjmp) + cfi_def_cfa(x0, 0) + cfi_offset(x19, JB_X19<<3) + cfi_offset(x20, JB_X20<<3) + cfi_offset(x21, JB_X21<<3) + cfi_offset(x22, JB_X22<<3) + cfi_offset(x23, JB_X23<<3) + cfi_offset(x24, JB_X24<<3) + cfi_offset(x25, JB_X25<<3) + cfi_offset(x26, JB_X26<<3) + cfi_offset(x27, JB_X27<<3) + cfi_offset(x28, JB_X28<<3) + cfi_offset(x29, JB_X29<<3) + cfi_offset(x30, JB_LR<<3) + + cfi_offset( d8, JB_D8<<3) + cfi_offset( d9, JB_D9<<3) + cfi_offset(d10, JB_D10<<3) + cfi_offset(d11, JB_D11<<3) + cfi_offset(d12, JB_D12<<3) + cfi_offset(d13, JB_D13<<3) + cfi_offset(d14, JB_D14<<3) + cfi_offset(d15, JB_D15<<3) + + ldp x19, x20, [x0, #JB_X19<<3] + ldp x21, x22, [x0, #JB_X21<<3] + ldp x23, x24, [x0, #JB_X23<<3] + ldp x25, x26, [x0, #JB_X25<<3] + ldp x27, x28, [x0, #JB_X27<<3] +#ifdef PTR_DEMANGLE + ldp x29, x4, [x0, #JB_X29<<3] + PTR_DEMANGLE (x30, x4, x3, x2) +#else + ldp x29, x30, [x0, #JB_X29<<3] +#endif + ldp d8, d9, [x0, #JB_D8<<3] + ldp d10, d11, [x0, #JB_D10<<3] + ldp d12, d13, [x0, #JB_D12<<3] + ldp d14, d15, [x0, #JB_D14<<3] + + /* Originally this was implemented with a series of + .cfi_restore() directives. + + The theory was that cfi_restore should revert to previous + frame value is the same as the current value. In practice + this doesn't work, even after cfi_restore() gdb continues + to try to recover a previous frame value offset from x0, + which gets stuffed after a few more instructions. The + cfi_same_value() mechanism appears to work fine. */ + + cfi_same_value(x19) + cfi_same_value(x20) + cfi_same_value(x21) + cfi_same_value(x22) + cfi_same_value(x23) + cfi_same_value(x24) + cfi_same_value(x25) + cfi_same_value(x26) + cfi_same_value(x27) + cfi_same_value(x28) + cfi_same_value(x29) + cfi_same_value(x30) + cfi_same_value(d8) + cfi_same_value(d9) + cfi_same_value(d10) + cfi_same_value(d11) + cfi_same_value(d12) + cfi_same_value(d13) + cfi_same_value(d14) + cfi_same_value(d15) +#ifdef PTR_DEMANGLE + ldr x4, [x0, #JB_SP<<3] + PTR_DEMANGLE (x5, x4, x3, x2) +#else + ldr x5, [x0, #JB_SP<<3] +#endif + mov sp, x5 + cmp x1, #0 + mov x0, #1 + csel x0, x1, x0, ne + /* Use br instead of ret because ret is guaranteed to mispredict */ + br x30 +END (__longjmp) diff --git a/sysdeps/aarch64/abort-instr.h b/sysdeps/aarch64/abort-instr.h new file mode 100644 index 0000000000..8b1c40b57d --- /dev/null +++ b/sysdeps/aarch64/abort-instr.h @@ -0,0 +1 @@ +#define ABORT_INSTRUCTION asm ("brk\t#1000") diff --git a/sysdeps/aarch64/backtrace.c b/sysdeps/aarch64/backtrace.c new file mode 100644 index 0000000000..27ce597b39 --- /dev/null +++ b/sysdeps/aarch64/backtrace.c @@ -0,0 +1 @@ +#include <sysdeps/x86_64/backtrace.c> diff --git a/sysdeps/aarch64/bits/atomic.h b/sysdeps/aarch64/bits/atomic.h new file mode 100644 index 0000000000..456e2ecdff --- /dev/null +++ b/sysdeps/aarch64/bits/atomic.h @@ -0,0 +1,171 @@ +/* Copyright (C) 2003-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/>. */ + +#ifndef _AARCH64_BITS_ATOMIC_H +#define _AARCH64_BITS_ATOMIC_H 1 + +#include <stdint.h> + +typedef int8_t atomic8_t; +typedef int16_t atomic16_t; +typedef int32_t atomic32_t; +typedef int64_t atomic64_t; + +typedef uint8_t uatomic8_t; +typedef uint16_t uatomic16_t; +typedef uint32_t uatomic32_t; +typedef uint64_t uatomic64_t; + +typedef intptr_t atomicptr_t; +typedef uintptr_t uatomicptr_t; +typedef intmax_t atomic_max_t; +typedef uintmax_t uatomic_max_t; + + +/* Compare and exchange. + For all "bool" routines, we return FALSE if exchange succesful. */ + +# define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +# define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +# define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +# define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +# define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + +# define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + +# define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + +# define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + + +/* Compare and exchange with "acquire" semantics, ie barrier after. */ + +# define atomic_compare_and_exchange_bool_acq(mem, new, old) \ + __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ + mem, new, old, __ATOMIC_ACQUIRE) + +# define atomic_compare_and_exchange_val_acq(mem, new, old) \ + __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ + mem, new, old, __ATOMIC_ACQUIRE) + +/* Compare and exchange with "release" semantics, ie barrier before. */ + +# define atomic_compare_and_exchange_bool_rel(mem, new, old) \ + __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ + mem, new, old, __ATOMIC_RELEASE) + +# define atomic_compare_and_exchange_val_rel(mem, new, old) \ + __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ + mem, new, old, __ATOMIC_RELEASE) + + +/* Atomic exchange (without compare). */ + +# define __arch_exchange_8_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +# define __arch_exchange_16_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +# define __arch_exchange_32_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +# define __arch_exchange_64_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +# define atomic_exchange_acq(mem, value) \ + __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) + +# define atomic_exchange_rel(mem, value) \ + __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE) + + +/* Atomically add value and return the previous (unincremented) value. */ + +# define __arch_exchange_and_add_8_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +# define __arch_exchange_and_add_16_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +# define __arch_exchange_and_add_32_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +# define __arch_exchange_and_add_64_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +# define atomic_exchange_and_add_acq(mem, value) \ + __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ + __ATOMIC_ACQUIRE) + +# define atomic_exchange_and_add_rel(mem, value) \ + __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ + __ATOMIC_RELEASE) + +/* Barrier macro. */ +#define atomic_full_barrier() __sync_synchronize() + +#endif diff --git a/sysdeps/aarch64/bits/endian.h b/sysdeps/aarch64/bits/endian.h new file mode 100644 index 0000000000..bafaba7011 --- /dev/null +++ b/sysdeps/aarch64/bits/endian.h @@ -0,0 +1,30 @@ +/* Copyright (C) 1997-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/>. */ + +#ifndef _ENDIAN_H +# error "Never use <bits/endian.h> directly; include <endian.h> instead." +#endif + +/* AArch64 can be either big or little endian. */ +#ifdef __AARCH64EB__ +# define __BYTE_ORDER __BIG_ENDIAN +#else +# define __BYTE_ORDER __LITTLE_ENDIAN +#endif + +#define __FLOAT_WORD_ORDER __BYTE_ORDER diff --git a/sysdeps/aarch64/bits/fenv.h b/sysdeps/aarch64/bits/fenv.h new file mode 100644 index 0000000000..8c884cbef4 --- /dev/null +++ b/sysdeps/aarch64/bits/fenv.h @@ -0,0 +1,74 @@ +/* Copyright (C) 2004-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/>. */ + +#ifndef _FENV_H +# error "Never use <bits/fenv.h> directly; include <fenv.h> instead." +#endif + +/* Define bits representing exceptions in the FPSR status word. */ +enum + { + FE_INVALID = +#define FE_INVALID 1 + FE_INVALID, + FE_DIVBYZERO = +#define FE_DIVBYZERO 2 + FE_DIVBYZERO, + FE_OVERFLOW = +#define FE_OVERFLOW 4 + FE_OVERFLOW, + FE_UNDERFLOW = +#define FE_UNDERFLOW 8 + FE_UNDERFLOW, + FE_INEXACT = +#define FE_INEXACT 16 + FE_INEXACT, + }; + +/* Amount to shift by to convert an exception bit in FPSR to a an + exception bit mask in FPCR. */ +#define FE_EXCEPT_SHIFT 8 + +/* All supported exceptions. */ +#define FE_ALL_EXCEPT \ + (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + +/* Define bits representing rounding modes in the FPCR Rmode field. */ +#define FE_TONEAREST 0x000000 +#define FE_UPWARD 0x400000 +#define FE_DOWNWARD 0x800000 +#define FE_TOWARDZERO 0xc00000 + +/* Type representing exception flags. */ +typedef unsigned int fexcept_t; + +/* Type representing floating-point environment. */ +typedef struct + { + unsigned int __fpcr; + unsigned int __fpsr; + } +fenv_t; + +/* If the default argument is used we use this value. */ +#define FE_DFL_ENV ((const fenv_t *) -1l) + +#ifdef __USE_GNU +/* Floating-point environment where none of the exceptions are masked. */ +# define FE_NOMASK_ENV ((const fenv_t *) -2) +#endif diff --git a/sysdeps/aarch64/bits/link.h b/sysdeps/aarch64/bits/link.h new file mode 100644 index 0000000000..fe068276ea --- /dev/null +++ b/sysdeps/aarch64/bits/link.h @@ -0,0 +1,60 @@ +/* Copyright (C) 2005-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/>. */ + +#ifndef _LINK_H +# error "Never include <bits/link.h> directly; use <link.h> instead." +#endif + +/* Registers for entry into PLT on AArch64. */ +typedef struct La_aarch64_regs +{ + uint64_t lr_xreg[8]; + uint64_t lr_dreg[8]; + uint64_t lr_sp; + uint64_t lr_lr; +} La_aarch64_regs; + +/* Return values for calls from PLT on AArch64. */ +typedef struct La_aarch64_retval +{ + /* Up to two integer registers can be used for a return value. */ + uint64_t lrv_xreg[2]; + /* Up to four D registers can be used for a return value. */ + uint64_t lrv_dreg[4]; + +} La_aarch64_retval; +__BEGIN_DECLS + +extern Elf64_Addr +la_aarch64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + La_aarch64_regs *__regs, + unsigned int *__flags, + const char *__symname, + long int *__framesizep); + +extern unsigned int +la_aarch64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + const La_aarch64_regs *__inregs, + La_aarch64_retval *__outregs, + const char *__symname); + +__END_DECLS diff --git a/sysdeps/aarch64/bits/linkmap.h b/sysdeps/aarch64/bits/linkmap.h new file mode 100644 index 0000000000..96e79b153f --- /dev/null +++ b/sysdeps/aarch64/bits/linkmap.h @@ -0,0 +1,23 @@ +/* Copyright (C) 2009-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/>. */ + +struct link_map_machine +{ + ElfW(Addr) plt; /* Address of .plt */ + void *tlsdesc_table; /* Address of TLS descriptor hash table. */ +}; diff --git a/sysdeps/aarch64/bits/mathdef.h b/sysdeps/aarch64/bits/mathdef.h new file mode 100644 index 0000000000..eb0a82559c --- /dev/null +++ b/sysdeps/aarch64/bits/mathdef.h @@ -0,0 +1,39 @@ +/* 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/>. */ + +#if !defined _MATH_H && !defined _COMPLEX_H +# error "Never use <bits/mathdef.h> directly; include <math.h> instead" +#endif + +#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF +# define _MATH_H_MATHDEF 1 + +/* GCC does not promote `float' values to `double'. */ +typedef float float_t; /* `float' expressions are evaluated as + `float'. */ +typedef double double_t; /* `double' expressions are evaluated as + `double'. */ + +/* The values returned by `ilogb' for 0 and NaN respectively. */ +# define FP_ILOGB0 (-2147483647) +# define FP_ILOGBNAN (2147483647) + +# define FP_FAST_FMA 1 +# define FP_FAST_FMAF 1 + +#endif /* ISO C99 */ diff --git a/sysdeps/aarch64/bits/setjmp.h b/sysdeps/aarch64/bits/setjmp.h new file mode 100644 index 0000000000..e0a3d6073b --- /dev/null +++ b/sysdeps/aarch64/bits/setjmp.h @@ -0,0 +1,33 @@ +/* Copyright (C) 1997-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/>. */ + +#ifndef _BITS_SETJMP_H +#define _BITS_SETJMP_H 1 + +#if !defined _SETJMP_H && !defined _PTHREAD_H +# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." +#endif + +#ifndef _ASM +/* Jump buffer contains: + x19-x28, x29(fp), x30(lr), (x31)sp, d8-d15. Other registers are not + saved. */ +__extension__ typedef unsigned long long __jmp_buf [22]; + +#endif +#endif diff --git a/sysdeps/aarch64/bsd-_setjmp.S b/sysdeps/aarch64/bsd-_setjmp.S new file mode 100644 index 0000000000..4e6a2da560 --- /dev/null +++ b/sysdeps/aarch64/bsd-_setjmp.S @@ -0,0 +1 @@ +/* _setjmp is in setjmp.S */ diff --git a/sysdeps/aarch64/bsd-setjmp.S b/sysdeps/aarch64/bsd-setjmp.S new file mode 100644 index 0000000000..1da848d2f1 --- /dev/null +++ b/sysdeps/aarch64/bsd-setjmp.S @@ -0,0 +1 @@ +/* setjmp is in setjmp.S */ diff --git a/sysdeps/aarch64/bzero.S b/sysdeps/aarch64/bzero.S new file mode 100644 index 0000000000..d082c15cdb --- /dev/null +++ b/sysdeps/aarch64/bzero.S @@ -0,0 +1,27 @@ +/* Copyright (C) 2013-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 <sysdep.h> + + .text +ENTRY(__bzero) + mov x2, x1 + mov x1, xzr + b __memset +END(__bzero) +weak_alias (__bzero, bzero) diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure new file mode 100644 index 0000000000..af870b7b49 --- /dev/null +++ b/sysdeps/aarch64/configure @@ -0,0 +1,174 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/aarch64. + +# We check to see if the compiler and flags are +# selecting the big endian ABI and if they are then +# we set libc_cv_aarch64_be to yes which causes +# HAVE_AARCH64_BE to be defined in config.h and +# in include/libc-symbols.h and thus available to +# shlib-versions to select the appropriate name for +# the dynamic linker via %ifdef. + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5 +$as_echo_n "checking for big endian... " >&6; } +if ${libc_cv_aarch64_be+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __AARCH64EB__ + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + libc_cv_aarch64_be=yes +else + libc_cv_aarch64_be=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5 +$as_echo "$libc_cv_aarch64_be" >&6; } +if test $libc_cv_aarch64_be = yes; then + $as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h + + config_vars="$config_vars +default-abi = lp64_be" +else + config_vars="$config_vars +default-abi = lp64" +fi diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac new file mode 100644 index 0000000000..7851dd4dac --- /dev/null +++ b/sysdeps/aarch64/configure.ac @@ -0,0 +1,22 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/aarch64. + +# We check to see if the compiler and flags are +# selecting the big endian ABI and if they are then +# we set libc_cv_aarch64_be to yes which causes +# HAVE_AARCH64_BE to be defined in config.h and +# in include/libc-symbols.h and thus available to +# shlib-versions to select the appropriate name for +# the dynamic linker via %ifdef. +AC_CACHE_CHECK([for big endian], + [libc_cv_aarch64_be], + [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__ + yes + #endif + ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)]) +if test $libc_cv_aarch64_be = yes; then + AC_DEFINE(HAVE_AARCH64_BE) + LIBC_CONFIG_VAR([default-abi], [lp64_be]) +else + LIBC_CONFIG_VAR([default-abi], [lp64]) +fi diff --git a/sysdeps/aarch64/crti.S b/sysdeps/aarch64/crti.S new file mode 100644 index 0000000000..2db7b6793f --- /dev/null +++ b/sysdeps/aarch64/crti.S @@ -0,0 +1,90 @@ +/* Special .init and .fini section support for AArch64. + Copyright (C) 1995-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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The GNU Lesser General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + Note that people who make modified versions of this file are not + obligated to grant this special exception for their modified + versions; it is their choice whether to do so. The GNU Lesser + General Public License gives permission to release a modified + version without this exception; this exception also makes it + possible to release a modified version which carries forward this + exception. + + 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/>. */ + +/* crti.S puts a function prologue at the beginning of the .init and + .fini sections and defines global symbols for those addresses, so + they can be called as functions. The symbols _init and _fini are + magic and cause the linker to emit DT_INIT and DT_FINI. */ + +#include <libc-symbols.h> + +#ifndef PREINIT_FUNCTION +# define PREINIT_FUNCTION __gmon_start__ +#endif + +#ifndef PREINIT_FUNCTION_WEAK +# define PREINIT_FUNCTION_WEAK 1 +#endif + +#if PREINIT_FUNCTION_WEAK + weak_extern (PREINIT_FUNCTION) +#else + .hidden PREINIT_FUNCTION +#endif + +#if PREINIT_FUNCTION_WEAK + .align 2 + .type call_weak_fn, %function +call_weak_fn: + adrp x0, :got:PREINIT_FUNCTION + ldr x0, [x0, #:got_lo12:PREINIT_FUNCTION] + cbz x0, 1f + b PREINIT_FUNCTION +1: + RET + .size call_weak_fn, .-call_weak_fn +#endif + + .section .init,"ax",%progbits + .align 2 + .global _init + .type _init, %function +_init: + stp x29, x30, [sp, -16]! + mov x29, sp +#if PREINIT_FUNCTION_WEAK + bl call_weak_fn +#else + bl PREINIT_FUNCTION +#endif + + .section .fini,"ax",%progbits + .align 2 + .global _fini + .type _fini, %function +_fini: + stp x29, x30, [sp, -16]! + mov x29, sp diff --git a/sysdeps/aarch64/crtn.S b/sysdeps/aarch64/crtn.S new file mode 100644 index 0000000000..3094e0d148 --- /dev/null +++ b/sysdeps/aarch64/crtn.S @@ -0,0 +1,46 @@ +/* Special .init and .fini section support for AArch64. + Copyright (C) 1995-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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The GNU Lesser General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + Note that people who make modified versions of this file are not + obligated to grant this special exception for their modified + versions; it is their choice whether to do so. The GNU Lesser + General Public License gives permission to release a modified + version without this exception; this exception also makes it + possible to release a modified version which carries forward this + exception. + + 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/>. */ + +/* crtn.S puts function epilogues in the .init and .fini sections + corresponding to the prologues in crti.S. */ + + .section .init,"ax",%progbits + ldp x29, x30, [sp], 16 + RET + + .section .fini,"ax",%progbits + ldp x29, x30, [sp], 16 + RET diff --git a/sysdeps/aarch64/dl-irel.h b/sysdeps/aarch64/dl-irel.h new file mode 100644 index 0000000000..78395caf23 --- /dev/null +++ b/sysdeps/aarch64/dl-irel.h @@ -0,0 +1,52 @@ +/* Machine-dependent ELF indirect relocation inline functions. + AArch64 version. + Copyright (C) 2012-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/>. */ + +#ifndef _DL_IREL_H +#define _DL_IREL_H + +#include <stdio.h> +#include <unistd.h> +#include <ldsodefs.h> + +#define ELF_MACHINE_IRELA 1 + +static inline ElfW(Addr) +__attribute ((always_inline)) +elf_ifunc_invoke (ElfW(Addr) addr) +{ + return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap)); +} + +static inline void +__attribute ((always_inline)) +elf_irela (const ElfW(Rela) *reloc) +{ + ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset; + const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); + + if (__glibc_likely (r_type == R_AARCH64_IRELATIVE)) + { + ElfW(Addr) value = elf_ifunc_invoke (reloc->r_addend); + *reloc_addr = value; + } + else + __libc_fatal ("unexpected reloc type in static binary"); +} + +#endif diff --git a/sysdeps/aarch64/dl-link.sym b/sysdeps/aarch64/dl-link.sym new file mode 100644 index 0000000000..d67d28b40c --- /dev/null +++ b/sysdeps/aarch64/dl-link.sym @@ -0,0 +1,15 @@ +#include <stddef.h> +#include <sysdep.h> +#include <link.h> +#include <dl-tlsdesc.h> + +DL_SIZEOF_RG sizeof(struct La_aarch64_regs) +DL_SIZEOF_RV sizeof(struct La_aarch64_retval) + +DL_OFFSET_RG_X0 offsetof(struct La_aarch64_regs, lr_xreg) +DL_OFFSET_RG_D0 offsetof(struct La_aarch64_regs, lr_dreg) +DL_OFFSET_RG_SP offsetof(struct La_aarch64_regs, lr_sp) +DL_OFFSET_RG_LR offsetof(struct La_aarch64_regs, lr_lr) + +DL_OFFSET_RV_X0 offsetof(struct La_aarch64_retval, lrv_xreg) +DL_OFFSET_RV_D0 offsetof(struct La_aarch64_retval, lrv_dreg) diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h new file mode 100644 index 0000000000..997c860ccb --- /dev/null +++ b/sysdeps/aarch64/dl-machine.h @@ -0,0 +1,401 @@ +/* Copyright (C) 1995-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/>. */ + +#ifndef dl_machine_h +#define dl_machine_h + +#define ELF_MACHINE_NAME "aarch64" + +#include <tls.h> +#include <dl-tlsdesc.h> +#include <dl-irel.h> + +/* Return nonzero iff ELF header is compatible with the running host. */ +static inline int __attribute__ ((unused)) +elf_machine_matches_host (const ElfW(Ehdr) *ehdr) +{ + return ehdr->e_machine == EM_AARCH64; +} + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT. */ +static inline ElfW(Addr) __attribute__ ((unused)) +elf_machine_dynamic (void) +{ + extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden; + return _GLOBAL_OFFSET_TABLE_[0]; +} + +/* Return the run-time load address of the shared object. */ + +static inline ElfW(Addr) __attribute__ ((unused)) +elf_machine_load_address (void) +{ + /* To figure out the load address we use the definition that for any symbol: + dynamic_addr(symbol) = static_addr(symbol) + load_addr + + The choice of symbol is arbitrary. The static address we obtain + by constructing a non GOT reference to the symbol, the dynamic + address of the symbol we compute using adrp/add to compute the + symbol's address relative to the PC. */ + + ElfW(Addr) static_addr; + ElfW(Addr) dynamic_addr; + + asm (" \n\ + adrp %1, _dl_start; \n\ + add %1, %1, #:lo12:_dl_start \n\ + ldr %w0, 1f \n\ + b 2f \n\ +1: .word _dl_start \n\ +2: \n\ + " : "=r" (static_addr), "=r" (dynamic_addr)); + return dynamic_addr - static_addr; +} + +/* Set up the loaded object described by L so its unrelocated PLT + entries will jump to the on-demand fixup code in dl-runtime.c. */ + +static inline int __attribute__ ((unused)) +elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) +{ + if (l->l_info[DT_JMPREL] && lazy) + { + ElfW(Addr) *got; + extern void _dl_runtime_resolve (ElfW(Word)); + extern void _dl_runtime_profile (ElfW(Word)); + + got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); + if (got[1]) + { + l->l_mach.plt = got[1] + l->l_addr; + } + got[1] = (ElfW(Addr)) l; + + /* The got[2] entry contains the address of a function which gets + called to get the address of a so far unresolved function and + jump to it. The profiling extension of the dynamic linker allows + to intercept the calls to collect information. In this case we + don't store the address in the GOT so that all future calls also + end in this function. */ + if ( profile) + { + got[2] = (ElfW(Addr)) &_dl_runtime_profile; + + if (GLRO(dl_profile) != NULL + && _dl_name_match_p (GLRO(dl_profile), l)) + /* Say that we really want profiling and the timers are + started. */ + GL(dl_profile_map) = l; + } + else + { + /* This function will get called to fix up the GOT entry + indicated by the offset on the stack, and then jump to + the resolved address. */ + got[2] = (ElfW(Addr)) &_dl_runtime_resolve; + } + } + + if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) + *(Elf64_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) + = (Elf64_Addr) &_dl_tlsdesc_resolve_rela; + + return lazy; +} + +/* Initial entry point for the dynamic linker. The C function + _dl_start is the real entry point, its return value is the user + program's entry point */ + +#define RTLD_START asm ("\ +.text \n\ +.globl _start \n\ +.type _start, %function \n\ +.globl _dl_start_user \n\ +.type _dl_start_user, %function \n\ +_start: \n\ + mov x0, sp \n\ + bl _dl_start \n\ + // returns user entry point in x0 \n\ + mov x21, x0 \n\ +_dl_start_user: \n\ + // get the original arg count \n\ + ldr x1, [sp] \n\ + // get the argv address \n\ + add x2, sp, #8 \n\ + // get _dl_skip_args to see if we were \n\ + // invoked as an executable \n\ + adrp x4, _dl_skip_args \n\ + ldr w4, [x4, #:lo12:_dl_skip_args] \n\ + // do we need to adjust argc/argv \n\ + cmp w4, 0 \n\ + beq .L_done_stack_adjust \n\ + // subtract _dl_skip_args from original arg count \n\ + sub x1, x1, x4 \n\ + // store adjusted argc back to stack \n\ + str x1, [sp] \n\ + // find the first unskipped argument \n\ + mov x3, x2 \n\ + add x4, x2, x4, lsl #3 \n\ + // shuffle argv down \n\ +1: ldr x5, [x4], #8 \n\ + str x5, [x3], #8 \n\ + cmp x5, #0 \n\ + bne 1b \n\ + // shuffle envp down \n\ +1: ldr x5, [x4], #8 \n\ + str x5, [x3], #8 \n\ + cmp x5, #0 \n\ + bne 1b \n\ + // shuffle auxv down \n\ +1: ldp x0, x5, [x4, #16]! \n\ + stp x0, x5, [x3], #16 \n\ + cmp x0, #0 \n\ + bne 1b \n\ + // Update _dl_argv \n\ + adrp x3, _dl_argv \n\ + str x2, [x3, #:lo12:_dl_argv] \n\ +.L_done_stack_adjust: \n\ + // compute envp \n\ + add x3, x2, x1, lsl #3 \n\ + add x3, x3, #8 \n\ + adrp x16, _rtld_local \n\ + add x16, x16, #:lo12:_rtld_local \n\ + ldr x0, [x16] \n\ + bl _dl_init_internal \n\ + // load the finalizer function \n\ + adrp x0, _dl_fini \n\ + add x0, x0, #:lo12:_dl_fini \n\ + // jump to the user_s entry point \n\ + br x21 \n\ +"); + +#define elf_machine_type_class(type) \ + ((((type) == R_AARCH64_JUMP_SLOT || \ + (type) == R_AARCH64_TLS_DTPMOD64 || \ + (type) == R_AARCH64_TLS_DTPREL64 || \ + (type) == R_AARCH64_TLS_TPREL64 || \ + (type) == R_AARCH64_TLSDESC) * ELF_RTYPE_CLASS_PLT) \ + | (((type) == R_AARCH64_COPY) * ELF_RTYPE_CLASS_COPY)) + +#define ELF_MACHINE_JMP_SLOT R_AARCH64_JUMP_SLOT + +/* AArch64 uses RELA not REL */ +#define ELF_MACHINE_NO_REL 1 + +static inline ElfW(Addr) +elf_machine_fixup_plt (struct link_map *map, lookup_t t, + const ElfW(Rela) *reloc, + ElfW(Addr) *reloc_addr, + ElfW(Addr) value) +{ + return *reloc_addr = value; +} + +/* Return the final value of a plt relocation. */ +static inline ElfW(Addr) +elf_machine_plt_value (struct link_map *map, + const ElfW(Rela) *reloc, + ElfW(Addr) value) +{ + return value; +} + +#endif + +/* Names of the architecture-specific auditing callback functions. */ +#define ARCH_LA_PLTENTER aarch64_gnu_pltenter +#define ARCH_LA_PLTEXIT aarch64_gnu_pltexit + +#ifdef RESOLVE_MAP + +auto inline void +__attribute__ ((always_inline)) +elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, + const ElfW(Sym) *sym, const struct r_found_version *version, + void *const reloc_addr_arg, int skip_ifunc) +{ + ElfW(Addr) *const reloc_addr = reloc_addr_arg; + const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); + + if (__builtin_expect (r_type == R_AARCH64_RELATIVE, 0)) + *reloc_addr = map->l_addr + reloc->r_addend; + else if (__builtin_expect (r_type == R_AARCH64_NONE, 0)) + return; + else + { + const ElfW(Sym) *const refsym = sym; + struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); + ElfW(Addr) value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value; + + if (sym != NULL + && __glibc_unlikely (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC) + && __glibc_likely (sym->st_shndx != SHN_UNDEF) + && __glibc_likely (!skip_ifunc)) + value = elf_ifunc_invoke (value); + + switch (r_type) + { + case R_AARCH64_COPY: + if (sym == NULL) + break; + + if (sym->st_size > refsym->st_size + || (GLRO(dl_verbose) && sym->st_size < refsym->st_size)) + { + const char *strtab; + + strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + RTLD_PROGNAME, strtab + refsym->st_name); + } + memcpy (reloc_addr_arg, (void *) value, + MIN (sym->st_size, refsym->st_size)); + break; + + case R_AARCH64_RELATIVE: + case R_AARCH64_GLOB_DAT: + case R_AARCH64_JUMP_SLOT: + case R_AARCH64_ABS32: + case R_AARCH64_ABS64: + *reloc_addr = value + reloc->r_addend; + break; + + case R_AARCH64_TLSDESC: + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; +#ifndef RTLD_BOOTSTRAP + if (! sym) + { + td->arg = (void*)reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else +#endif + { +#ifndef RTLD_BOOTSTRAP +# ifndef SHARED + CHECK_STATIC_TLS (map, sym_map); +# else + if (!TRY_STATIC_TLS (map, sym_map)) + { + td->arg = _dl_make_tlsdesc_dynamic + (sym_map, sym->st_value + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif +#endif + { + td->arg = (void*)(sym->st_value + sym_map->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + break; + } + + case R_AARCH64_TLS_DTPMOD64: +#ifdef RTLD_BOOTSTRAP + *reloc_addr = 1; +#else + if (sym_map != NULL) + { + *reloc_addr = sym_map->l_tls_modid; + } +#endif + break; + + case R_AARCH64_TLS_DTPREL64: + if (sym) + *reloc_addr = sym->st_value + reloc->r_addend; + break; + + case R_AARCH64_TLS_TPREL64: + if (sym) + { + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr = + sym->st_value + reloc->r_addend + sym_map->l_tls_offset; + } + break; + + case R_AARCH64_IRELATIVE: + value = map->l_addr + reloc->r_addend; + value = elf_ifunc_invoke (value); + *reloc_addr = value; + break; + + default: + _dl_reloc_bad_type (map, r_type, 0); + break; + } + } +} + +inline void +__attribute__ ((always_inline)) +elf_machine_rela_relative (ElfW(Addr) l_addr, + const ElfW(Rela) *reloc, + void *const reloc_addr_arg) +{ + ElfW(Addr) *const reloc_addr = reloc_addr_arg; + *reloc_addr = l_addr + reloc->r_addend; +} + +inline void +__attribute__ ((always_inline)) +elf_machine_lazy_rel (struct link_map *map, + ElfW(Addr) l_addr, + const ElfW(Rela) *reloc, + int skip_ifunc) +{ + ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); + const unsigned int r_type = ELF64_R_TYPE (reloc->r_info); + /* Check for unexpected PLT reloc type. */ + if (__builtin_expect (r_type == R_AARCH64_JUMP_SLOT, 1)) + { + if (__builtin_expect (map->l_mach.plt, 0) == 0) + *reloc_addr += l_addr; + else + *reloc_addr = map->l_mach.plt; + } + else if (__builtin_expect (r_type == R_AARCH64_TLSDESC, 1)) + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; + + td->arg = (void*)reloc; + td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + + map->l_addr); + } + else if (__glibc_unlikely (r_type == R_AARCH64_IRELATIVE)) + { + ElfW(Addr) value = map->l_addr + reloc->r_addend; + if (__glibc_likely (!skip_ifunc)) + value = elf_ifunc_invoke (value); + *reloc_addr = value; + } + else + _dl_reloc_bad_type (map, r_type, 1); +} + +#endif diff --git a/sysdeps/aarch64/dl-sysdep.h b/sysdeps/aarch64/dl-sysdep.h new file mode 100644 index 0000000000..4a452f5d8f --- /dev/null +++ b/sysdeps/aarch64/dl-sysdep.h @@ -0,0 +1,23 @@ +/* Copyright (C) 2002-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_next <dl-sysdep.h> + +/* _dl_argv cannot be attribute_relro, because _dl_start_user + might write into it after _dl_start returns. */ +#define DL_ARGV_NOT_RELRO 1 diff --git a/sysdeps/aarch64/dl-tls.h b/sysdeps/aarch64/dl-tls.h new file mode 100644 index 0000000000..1eb8c97245 --- /dev/null +++ b/sysdeps/aarch64/dl-tls.h @@ -0,0 +1,30 @@ +/* Copyright (C) 2005-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/>. */ + +/* Type used for the representation of TLS information in the GOT. */ +typedef struct +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + + +extern void *__tls_get_addr (tls_index *ti); + +/* Value used for dtv entries for which the allocation is delayed. */ +#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/sysdeps/aarch64/dl-tlsdesc.S b/sysdeps/aarch64/dl-tlsdesc.S new file mode 100644 index 0000000000..ded5471bea --- /dev/null +++ b/sysdeps/aarch64/dl-tlsdesc.S @@ -0,0 +1,329 @@ +/* Thread-local storage handling in the ELF dynamic linker. + AArch64 version. + 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 <sysdep.h> +#include <tls.h> +#include "tlsdesc.h" + +#define NSAVEDQREGPAIRS 16 +#define SAVE_Q_REGISTERS \ + stp q0, q1, [sp, #-32*NSAVEDQREGPAIRS]!; \ + cfi_adjust_cfa_offset (32*NSAVEDQREGPAIRS); \ + stp q2, q3, [sp, #32*1]; \ + stp q4, q5, [sp, #32*2]; \ + stp q6, q7, [sp, #32*3]; \ + stp q8, q9, [sp, #32*4]; \ + stp q10, q11, [sp, #32*5]; \ + stp q12, q13, [sp, #32*6]; \ + stp q14, q15, [sp, #32*7]; \ + stp q16, q17, [sp, #32*8]; \ + stp q18, q19, [sp, #32*9]; \ + stp q20, q21, [sp, #32*10]; \ + stp q22, q23, [sp, #32*11]; \ + stp q24, q25, [sp, #32*12]; \ + stp q26, q27, [sp, #32*13]; \ + stp q28, q29, [sp, #32*14]; \ + stp q30, q31, [sp, #32*15]; + +#define RESTORE_Q_REGISTERS \ + ldp q2, q3, [sp, #32*1]; \ + ldp q4, q5, [sp, #32*2]; \ + ldp q6, q7, [sp, #32*3]; \ + ldp q8, q9, [sp, #32*4]; \ + ldp q10, q11, [sp, #32*5]; \ + ldp q12, q13, [sp, #32*6]; \ + ldp q14, q15, [sp, #32*7]; \ + ldp q16, q17, [sp, #32*8]; \ + ldp q18, q19, [sp, #32*9]; \ + ldp q20, q21, [sp, #32*10]; \ + ldp q22, q23, [sp, #32*11]; \ + ldp q24, q25, [sp, #32*12]; \ + ldp q26, q27, [sp, #32*13]; \ + ldp q28, q29, [sp, #32*14]; \ + ldp q30, q31, [sp, #32*15]; \ + ldp q0, q1, [sp], #32*NSAVEDQREGPAIRS; \ + cfi_adjust_cfa_offset (-32*NSAVEDQREGPAIRS); + + .text + + /* Compute the thread pointer offset for symbols in the static + TLS block. The offset is the same for all threads. + Prototype: + _dl_tlsdesc_return (tlsdesc *) ; + */ + .hidden _dl_tlsdesc_return + .global _dl_tlsdesc_return + .type _dl_tlsdesc_return,%function + cfi_startproc + .align 2 +_dl_tlsdesc_return: + ldr x0, [x0, #8] + RET + cfi_endproc + .size _dl_tlsdesc_return, .-_dl_tlsdesc_return + + /* Handler for undefined weak TLS symbols. + Prototype: + _dl_tlsdesc_undefweak (tlsdesc *); + + The second word of the descriptor contains the addend. + Return the addend minus the thread pointer. This ensures + that when the caller adds on the thread pointer it gets back + the addend. */ + + .hidden _dl_tlsdesc_undefweak + .global _dl_tlsdesc_undefweak + .type _dl_tlsdesc_undefweak,%function + cfi_startproc + .align 2 +_dl_tlsdesc_undefweak: + str x1, [sp, #-16]! + cfi_adjust_cfa_offset(16) + ldr x0, [x0, #8] + mrs x1, tpidr_el0 + sub x0, x0, x1 + ldr x1, [sp], #16 + cfi_adjust_cfa_offset(16) + RET + cfi_endproc + .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak + +#ifdef SHARED + /* Handler for dynamic TLS symbols. + Prototype: + _dl_tlsdesc_dynamic (tlsdesc *) ; + + The second word of the descriptor points to a + tlsdesc_dynamic_arg structure. + + Returns the offset between the thread pointer and the + object referenced by the argument. + + ptrdiff_t + __attribute__ ((__regparm__ (1))) + _dl_tlsdesc_dynamic (struct tlsdesc *tdp) + { + struct tlsdesc_dynamic_arg *td = tdp->arg; + dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); + if (__builtin_expect (td->gen_count <= dtv[0].counter + && (dtv[td->tlsinfo.ti_module].pointer.val + != TLS_DTV_UNALLOCATED), + 1)) + return dtv[td->tlsinfo.ti_module].pointer.val + + td->tlsinfo.ti_offset + - __thread_pointer; + + return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; + } + */ + + .hidden _dl_tlsdesc_dynamic + .global _dl_tlsdesc_dynamic + .type _dl_tlsdesc_dynamic,%function + cfi_startproc + .align 2 +_dl_tlsdesc_dynamic: +# define NSAVEXREGPAIRS 2 + stp x29, x30, [sp,#-(32+16*NSAVEXREGPAIRS)]! + cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) + mov x29, sp + + /* Save just enough registers to support fast path, if we fall + into slow path we will save additional registers. */ + + stp x1, x2, [sp, #32+16*0] + stp x3, x4, [sp, #32+16*1] + + mrs x4, tpidr_el0 + ldr x1, [x0,#8] + ldr x0, [x4] + ldr x3, [x1,#16] + ldr x2, [x0] + cmp x3, x2 + b.hi 2f + ldr x2, [x1] + add x0, x0, x2, lsl #4 + ldr x0, [x0] + cmn x0, #0x1 + b.eq 2f + ldr x1, [x1,#8] + add x0, x0, x1 + sub x0, x0, x4 +1: + ldp x1, x2, [sp, #32+16*0] + ldp x3, x4, [sp, #32+16*1] + + ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) + cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) +# undef NSAVEXREGPAIRS + RET +2: + /* This is the slow path. We need to call __tls_get_addr() which + means we need to save and restore all the register that the + callee will trash. */ + + /* Save the remaining registers that we must treat as caller save. */ +# define NSAVEXREGPAIRS 7 + stp x5, x6, [sp, #-16*NSAVEXREGPAIRS]! + cfi_adjust_cfa_offset (16*NSAVEXREGPAIRS) + stp x7, x8, [sp, #16*1] + stp x9, x10, [sp, #16*2] + stp x11, x12, [sp, #16*3] + stp x13, x14, [sp, #16*4] + stp x15, x16, [sp, #16*5] + stp x17, x18, [sp, #16*6] + + SAVE_Q_REGISTERS + + mov x0, x1 + bl __tls_get_addr + + mrs x1, tpidr_el0 + sub x0, x0, x1 + + RESTORE_Q_REGISTERS + + ldp x7, x8, [sp, #16*1] + ldp x9, x10, [sp, #16*2] + ldp x11, x12, [sp, #16*3] + ldp x13, x14, [sp, #16*4] + ldp x15, x16, [sp, #16*5] + ldp x17, x18, [sp, #16*6] + ldp x5, x6, [sp], #16*NSAVEXREGPAIRS + cfi_adjust_cfa_offset (-16*NSAVEXREGPAIRS) + b 1b + cfi_endproc + .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic +# undef NSAVEXREGPAIRS +#endif + + /* This function is a wrapper for a lazy resolver for TLS_DESC + RELA relocations. + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_rela + .global _dl_tlsdesc_resolve_rela + .type _dl_tlsdesc_resolve_rela,%function + cfi_startproc + .align 2 +_dl_tlsdesc_resolve_rela: +#define NSAVEXREGPAIRS 9 + stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! + cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) + mov x29, sp + stp x1, x4, [sp, #32+16*0] + stp x5, x6, [sp, #32+16*1] + stp x7, x8, [sp, #32+16*2] + stp x9, x10, [sp, #32+16*3] + stp x11, x12, [sp, #32+16*4] + stp x13, x14, [sp, #32+16*5] + stp x15, x16, [sp, #32+16*6] + stp x17, x18, [sp, #32+16*7] + str x0, [sp, #32+16*8] + + SAVE_Q_REGISTERS + + ldr x1, [x3, #8] + bl _dl_tlsdesc_resolve_rela_fixup + + RESTORE_Q_REGISTERS + + ldr x0, [sp, #32+16*8] + ldr x1, [x0] + blr x1 + + ldp x1, x4, [sp, #32+16*0] + ldp x5, x6, [sp, #32+16*1] + ldp x7, x8, [sp, #32+16*2] + ldp x9, x10, [sp, #32+16*3] + ldp x11, x12, [sp, #32+16*4] + ldp x13, x14, [sp, #32+16*5] + ldp x15, x16, [sp, #32+16*6] + ldp x17, x18, [sp, #32+16*7] + ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) + cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) + ldp x2, x3, [sp], #16 + cfi_adjust_cfa_offset (-16) + RET +#undef NSAVEXREGPAIRS + cfi_endproc + .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela + + /* This function is a placeholder for lazy resolving of TLS + relocations. Once some thread starts resolving a TLS + relocation, it sets up the TLS descriptor to use this + resolver, such that other threads that would attempt to + resolve it concurrently may skip the call to the original lazy + resolver and go straight to a condition wait. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_hold + .global _dl_tlsdesc_resolve_hold + .type _dl_tlsdesc_resolve_hold,%function + cfi_startproc + .align 2 +_dl_tlsdesc_resolve_hold: +#define NSAVEXREGPAIRS 10 +1: + stp x29, x30, [sp, #-(32+16*NSAVEXREGPAIRS)]! + cfi_adjust_cfa_offset (32+16*NSAVEXREGPAIRS) + mov x29, sp + stp x1, x2, [sp, #32+16*0] + stp x3, x4, [sp, #32+16*1] + stp x5, x6, [sp, #32+16*2] + stp x7, x8, [sp, #32+16*3] + stp x9, x10, [sp, #32+16*4] + stp x11, x12, [sp, #32+16*5] + stp x13, x14, [sp, #32+16*6] + stp x15, x16, [sp, #32+16*7] + stp x17, x18, [sp, #32+16*8] + str x0, [sp, #32+16*9] + + SAVE_Q_REGISTERS + + adr x1, 1b + bl _dl_tlsdesc_resolve_hold_fixup + + RESTORE_Q_REGISTERS + + ldr x0, [sp, #32+16*9] + ldr x1, [x0] + blr x1 + + ldp x1, x2, [sp, #32+16*0] + ldp x3, x4, [sp, #32+16*1] + ldp x5, x6, [sp, #32+16*2] + ldp x7, x8, [sp, #32+16*3] + ldp x9, x10, [sp, #32+16*4] + ldp x11, x12, [sp, #32+16*5] + ldp x13, x14, [sp, #32+16*6] + ldp x15, x16, [sp, #32+16*7] + ldp x17, x18, [sp, #32+16*8] + ldp x29, x30, [sp], #(32+16*NSAVEXREGPAIRS) + cfi_adjust_cfa_offset (-32+16*NSAVEXREGPAIRS) + RET + cfi_endproc + .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold +#undef NSAVEXREGPAIRS diff --git a/sysdeps/aarch64/dl-tlsdesc.h b/sysdeps/aarch64/dl-tlsdesc.h new file mode 100644 index 0000000000..5ff1f74177 --- /dev/null +++ b/sysdeps/aarch64/dl-tlsdesc.h @@ -0,0 +1,65 @@ +/* Thread-local storage descriptor handling in the ELF dynamic linker. + AArch64 version. + 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/>. */ + +#ifndef _AARCH64_DL_TLSDESC_H +#define _AARCH64_DL_TLSDESC_H 1 + +/* Type used to represent a TLS descriptor in the GOT. */ +struct tlsdesc +{ + ptrdiff_t (*entry) (struct tlsdesc *); + void *arg; +}; + +typedef struct dl_tls_index +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + +/* Type used as the argument in a TLS descriptor for a symbol that + needs dynamic TLS offsets. */ +struct tlsdesc_dynamic_arg +{ + tls_index tlsinfo; + size_t gen_count; +}; + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_return (struct tlsdesc *); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_undefweak (struct tlsdesc *); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_resolve_rela (struct tlsdesc *); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_resolve_hold (struct tlsdesc *); + +# ifdef SHARED +extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *, + size_t); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_dynamic (struct tlsdesc *); +#endif + +#endif diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S new file mode 100644 index 0000000000..2037f18276 --- /dev/null +++ b/sysdeps/aarch64/dl-trampoline.S @@ -0,0 +1,296 @@ +/* Copyright (C) 2005-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 <sysdep.h> +#include <libc-symbols.h> + +#include "dl-link.h" + +#define ip0 x16 +#define ip1 x17 +#define lr x30 + + .text + .globl _dl_runtime_resolve + .type _dl_runtime_resolve, #function + cfi_startproc + .align 2 +_dl_runtime_resolve: + /* AArch64 we get called with: + ip0 &PLTGOT[2] + ip1 temp(dl resolver entry point) + [sp, #8] lr + [sp, #0] &PLTGOT[n] + */ + + cfi_rel_offset (lr, 8) + + /* Save arguments. */ + stp x8, x9, [sp, #-(80+8*16)]! + cfi_adjust_cfa_offset (80+8*16) + cfi_rel_offset (x8, 0) + cfi_rel_offset (x9, 8) + + stp x6, x7, [sp, #16] + cfi_rel_offset (x6, 16) + cfi_rel_offset (x7, 24) + + stp x4, x5, [sp, #32] + cfi_rel_offset (x4, 32) + cfi_rel_offset (x5, 40) + + stp x2, x3, [sp, #48] + cfi_rel_offset (x2, 48) + cfi_rel_offset (x3, 56) + + stp x0, x1, [sp, #64] + cfi_rel_offset (x0, 64) + cfi_rel_offset (x1, 72) + + stp q0, q1, [sp, #(80+0*16)] + cfi_rel_offset (q0, 80+0*16) + cfi_rel_offset (q1, 80+1*16) + + stp q2, q3, [sp, #(80+2*16)] + cfi_rel_offset (q0, 80+2*16) + cfi_rel_offset (q1, 80+3*16) + + stp q4, q5, [sp, #(80+4*16)] + cfi_rel_offset (q0, 80+4*16) + cfi_rel_offset (q1, 80+5*16) + + stp q6, q7, [sp, #(80+6*16)] + cfi_rel_offset (q0, 80+6*16) + cfi_rel_offset (q1, 80+7*16) + + /* Get pointer to linker struct. */ + ldr x0, [ip0, #-8] + + /* Prepare to call _dl_fixup(). */ + ldr x1, [sp, 80+8*16] /* Recover &PLTGOT[n] */ + + sub x1, x1, ip0 + add x1, x1, x1, lsl #1 + lsl x1, x1, #3 + sub x1, x1, #192 + lsr x1, x1, #3 + + /* Call fixup routine. */ + bl _dl_fixup + + /* Save the return. */ + mov ip0, x0 + + /* Get arguments and return address back. */ + ldp q0, q1, [sp, #(80+0*16)] + ldp q2, q3, [sp, #(80+2*16)] + ldp q4, q5, [sp, #(80+4*16)] + ldp q6, q7, [sp, #(80+6*16)] + ldp x0, x1, [sp, #64] + ldp x2, x3, [sp, #48] + ldp x4, x5, [sp, #32] + ldp x6, x7, [sp, #16] + ldp x8, x9, [sp], #(80+8*16) + cfi_adjust_cfa_offset (-(80+8*16)) + + ldp ip1, lr, [sp], #16 + cfi_adjust_cfa_offset (-16) + + /* Jump to the newly found address. */ + br ip0 + + cfi_endproc + .size _dl_runtime_resolve, .-_dl_runtime_resolve +#ifndef PROF + .globl _dl_runtime_profile + .type _dl_runtime_profile, #function + cfi_startproc + .align 2 +_dl_runtime_profile: + /* AArch64 we get called with: + ip0 &PLTGOT[2] + ip1 temp(dl resolver entry point) + [sp, #8] lr + [sp, #0] &PLTGOT[n] + + Stack frame layout: + [sp, #...] lr + [sp, #...] &PLTGOT[n] + [sp, #96] La_aarch64_regs + [sp, #48] La_aarch64_retval + [sp, #40] frame size return from pltenter + [sp, #32] dl_profile_call saved x1 + [sp, #24] dl_profile_call saved x0 + [sp, #16] t1 + [sp, #0] x29, lr <- x29 + */ + +# define OFFSET_T1 16 +# define OFFSET_SAVED_CALL_X0 OFFSET_T1 + 8 +# define OFFSET_FS OFFSET_SAVED_CALL_X0 + 16 +# define OFFSET_RV OFFSET_FS + 8 +# define OFFSET_RG OFFSET_RV + DL_SIZEOF_RV + +# define SF_SIZE OFFSET_RG + DL_SIZEOF_RG + +# define OFFSET_PLTGOTN SF_SIZE +# define OFFSET_LR OFFSET_PLTGOTN + 8 + + /* Save arguments. */ + sub sp, sp, #SF_SIZE + cfi_adjust_cfa_offset (SF_SIZE) + stp x29, x30, [SP, #0] + mov x29, sp + cfi_def_cfa_register (x29) + cfi_rel_offset (x29, 0) + cfi_rel_offset (lr, 8) + + stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] + cfi_rel_offset (x0, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 0) + cfi_rel_offset (x1, OFFSET_RG + DL_OFFSET_RG_X0 + 16*0 + 8) + stp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] + cfi_rel_offset (x2, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 0) + cfi_rel_offset (x3, OFFSET_RG + DL_OFFSET_RG_X0 + 16*1 + 8) + stp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] + cfi_rel_offset (x4, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 0) + cfi_rel_offset (x5, OFFSET_RG + DL_OFFSET_RG_X0 + 16*2 + 8) + stp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] + cfi_rel_offset (x6, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 0) + cfi_rel_offset (x7, OFFSET_RG + DL_OFFSET_RG_X0 + 16*3 + 8) + + stp d0, d1, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] + cfi_rel_offset (d0, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0) + cfi_rel_offset (d1, OFFSET_RG + DL_OFFSET_RG_D0 + 16*0 + 8) + stp d2, d3, [X29, #OFFSET_RG+ DL_OFFSET_RG_D0 + 16*1] + cfi_rel_offset (d2, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 0) + cfi_rel_offset (d3, OFFSET_RG + DL_OFFSET_RG_D0 + 16*1 + 8) + stp d4, d5, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] + cfi_rel_offset (d4, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 0) + cfi_rel_offset (d5, OFFSET_RG + DL_OFFSET_RG_D0 + 16*2 + 8) + stp d6, d7, [X29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] + cfi_rel_offset (d6, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 0) + cfi_rel_offset (d7, OFFSET_RG + DL_OFFSET_RG_D0 + 16*3 + 8) + + add x0, x29, #SF_SIZE + 16 + ldr x1, [x29, #OFFSET_LR] + stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_SP] + + /* Get pointer to linker struct. */ + ldr x0, [ip0, #-8] + + /* Prepare to call _dl_profile_fixup(). */ + ldr x1, [x29, OFFSET_PLTGOTN] /* Recover &PLTGOT[n] */ + + sub x1, x1, ip0 + add x1, x1, x1, lsl #1 + lsl x1, x1, #3 + sub x1, x1, #192 + lsr x1, x1, #3 + + stp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] + + /* Set up extra args for _dl_profile_fixup */ + ldr x2, [x29, #OFFSET_LR] /* load saved LR */ + add x3, x29, #OFFSET_RG /* address of La_aarch64_reg */ + add x4, x29, #OFFSET_FS /* address of framesize */ + bl _dl_profile_fixup + + ldr ip0, [x29, #OFFSET_FS] /* framesize == 0 */ + cmp ip0, #0 + bge 1f + cfi_remember_state + + /* Save the return. */ + mov ip0, x0 + + /* Get arguments and return address back. */ + ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] + ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] + ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] + ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] + ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] + ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] + ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] + ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] + + cfi_def_cfa_register (sp) + ldp x29, x30, [x29, #0] + cfi_restore(x29) + cfi_restore(x30) + + add sp, sp, SF_SIZE + 16 + cfi_adjust_cfa_offset (- SF_SIZE - 16) + + /* Jump to the newly found address. */ + br ip0 + + cfi_restore_state +1: + /* The new frame size is in ip0. */ + + sub x1, x29, ip0 + and sp, x1, #0xfffffffffffffff0 + + str x0, [x29, #OFFSET_T1] + + mov x0, sp + add x1, x29, #SF_SIZE + 16 + mov x2, ip0 + bl memcpy + + ldr ip0, [x29, #OFFSET_T1] + + /* Call the function. */ + ldp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*0] + ldp x2, x3, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*1] + ldp x4, x5, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*2] + ldp x6, x7, [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*3] + ldp d0, d1, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*0] + ldp d2, d3, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*1] + ldp d4, d5, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*2] + ldp d6, d7, [x29, #OFFSET_RG + DL_OFFSET_RG_D0 + 16*3] + blr ip0 + stp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] + stp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] + stp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] + + /* Setup call to pltexit */ + ldp x0, x1, [x29, #OFFSET_SAVED_CALL_X0] + add x2, x29, #OFFSET_RG + add x3, x29, #OFFSET_RV + bl _dl_call_pltexit + + ldp x0, x1, [x29, #OFFSET_RV + DL_OFFSET_RV_X0] + ldp d0, d1, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*0] + ldp d2, d3, [x29, #OFFSET_RV + DL_OFFSET_RV_D0 + 16*1] + /* LR from within La_aarch64_reg */ + ldr lr, [x29, #OFFSET_RG + DL_OFFSET_RG_LR] + cfi_restore(lr) + mov sp, x29 + cfi_def_cfa_register (sp) + ldr x29, [x29, #0] + cfi_restore(x29) + add sp, sp, SF_SIZE + 16 + cfi_adjust_cfa_offset (- SF_SIZE - 16) + + br lr + + cfi_endproc + .size _dl_runtime_profile, .-_dl_runtime_profile +#endif + .previous diff --git a/sysdeps/aarch64/fpu/fclrexcpt.c b/sysdeps/aarch64/fpu/fclrexcpt.c new file mode 100644 index 0000000000..531269f9cf --- /dev/null +++ b/sysdeps/aarch64/fpu/fclrexcpt.c @@ -0,0 +1,36 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +feclearexcept (int excepts) +{ + fpu_fpsr_t fpsr; + + excepts &= FE_ALL_EXCEPT; + + _FPU_GETFPSR (fpsr); + fpsr = (fpsr & ~FE_ALL_EXCEPT) | (fpsr & FE_ALL_EXCEPT & ~excepts); + + _FPU_SETFPSR (fpsr); + + return 0; +} +libm_hidden_def (feclearexcept) diff --git a/sysdeps/aarch64/fpu/fedisblxcpt.c b/sysdeps/aarch64/fpu/fedisblxcpt.c new file mode 100644 index 0000000000..719d52f60a --- /dev/null +++ b/sysdeps/aarch64/fpu/fedisblxcpt.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2001-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> +#include <fpu_control.h> + +int +fedisableexcept (int excepts) +{ + fpu_control_t fpcr; + int original_excepts; + + _FPU_GETCW (fpcr); + + original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; + + excepts &= FE_ALL_EXCEPT; + + fpcr &= ~(excepts << FE_EXCEPT_SHIFT); + + _FPU_SETCW (fpcr); + + return original_excepts; +} diff --git a/sysdeps/aarch64/fpu/feenablxcpt.c b/sysdeps/aarch64/fpu/feenablxcpt.c new file mode 100644 index 0000000000..d97699981f --- /dev/null +++ b/sysdeps/aarch64/fpu/feenablxcpt.c @@ -0,0 +1,39 @@ +/* Copyright (C) 2001-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> +#include <fpu_control.h> + +int +feenableexcept (int excepts) +{ + fpu_control_t fpcr; + int original_excepts; + + _FPU_GETCW (fpcr); + + original_excepts = (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; + + excepts &= FE_ALL_EXCEPT; + + fpcr |= (excepts << FE_EXCEPT_SHIFT); + + _FPU_SETCW (fpcr); + + return original_excepts; +} diff --git a/sysdeps/aarch64/fpu/fegetenv.c b/sysdeps/aarch64/fpu/fegetenv.c new file mode 100644 index 0000000000..4c88fbfa43 --- /dev/null +++ b/sysdeps/aarch64/fpu/fegetenv.c @@ -0,0 +1,33 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +fegetenv (fenv_t *envp) +{ + fpu_control_t fpcr; + fpu_fpsr_t fpsr; + _FPU_GETCW (fpcr); + _FPU_GETFPSR (fpsr); + envp->__fpcr = fpcr; + envp->__fpsr = fpsr; + return 0; +} +libm_hidden_def (fegetenv) diff --git a/sysdeps/aarch64/fpu/fegetexcept.c b/sysdeps/aarch64/fpu/fegetexcept.c new file mode 100644 index 0000000000..dbcd92a4a2 --- /dev/null +++ b/sysdeps/aarch64/fpu/fegetexcept.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2001-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> +#include <fpu_control.h> + +int +fegetexcept (void) +{ + fpu_control_t fpcr; + _FPU_GETCW (fpcr); + return (fpcr >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT; +} diff --git a/sysdeps/aarch64/fpu/fegetround.c b/sysdeps/aarch64/fpu/fegetround.c new file mode 100644 index 0000000000..a970ce3569 --- /dev/null +++ b/sysdeps/aarch64/fpu/fegetround.c @@ -0,0 +1,29 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +fegetround (void) +{ + fpu_control_t fpcr; + _FPU_GETCW (fpcr); + return fpcr & FE_TOWARDZERO; +} +libm_hidden_def (fegetround) diff --git a/sysdeps/aarch64/fpu/feholdexcpt.c b/sysdeps/aarch64/fpu/feholdexcpt.c new file mode 100644 index 0000000000..0514ac15b5 --- /dev/null +++ b/sysdeps/aarch64/fpu/feholdexcpt.c @@ -0,0 +1,47 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +feholdexcept (fenv_t *envp) +{ + fpu_fpsr_t fpsr; + fpu_control_t fpcr; + + _FPU_GETCW (fpcr); + envp->__fpcr = fpcr; + + _FPU_GETFPSR (fpsr); + envp->__fpsr = fpsr; + + /* Now set all exceptions to non-stop. */ + fpcr &= ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); + + /* And clear all exception flags. */ + fpsr &= ~FE_ALL_EXCEPT; + + _FPU_SETFPSR (fpsr); + + _FPU_SETCW (fpcr); + + return 0; +} + +libm_hidden_def (feholdexcept) diff --git a/sysdeps/aarch64/fpu/fesetenv.c b/sysdeps/aarch64/fpu/fesetenv.c new file mode 100644 index 0000000000..443c705d22 --- /dev/null +++ b/sysdeps/aarch64/fpu/fesetenv.c @@ -0,0 +1,57 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +fesetenv (const fenv_t *envp) +{ + fpu_control_t fpcr; + fpu_fpsr_t fpsr; + + _FPU_GETCW (fpcr); + _FPU_GETFPSR (fpsr); + + fpcr &= _FPU_RESERVED; + fpsr &= _FPU_FPSR_RESERVED; + + if (envp == FE_DFL_ENV) + { + fpcr |= _FPU_DEFAULT; + fpsr |= _FPU_FPSR_DEFAULT; + } + else if (envp == FE_NOMASK_ENV) + { + fpcr |= _FPU_FPCR_IEEE; + fpsr |= _FPU_FPSR_IEEE; + } + else + { + fpcr |= envp->__fpcr & ~_FPU_RESERVED; + fpsr |= envp->__fpsr & ~_FPU_FPSR_RESERVED; + } + + _FPU_SETFPSR (fpsr); + + _FPU_SETCW (fpcr); + + return 0; +} + +libm_hidden_def (fesetenv) diff --git a/sysdeps/aarch64/fpu/fesetround.c b/sysdeps/aarch64/fpu/fesetround.c new file mode 100644 index 0000000000..40a05f6582 --- /dev/null +++ b/sysdeps/aarch64/fpu/fesetround.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +fesetround (int round) +{ + fpu_control_t fpcr; + + switch (round) + { + case FE_TONEAREST: + case FE_UPWARD: + case FE_DOWNWARD: + case FE_TOWARDZERO: + _FPU_GETCW (fpcr); + fpcr = (fpcr & ~FE_TOWARDZERO) | round; + + _FPU_SETCW (fpcr); + return 0; + + default: + return 1; + } + + return 1; +} + +libm_hidden_def (fesetround) diff --git a/sysdeps/aarch64/fpu/feupdateenv.c b/sysdeps/aarch64/fpu/feupdateenv.c new file mode 100644 index 0000000000..6d64a9b727 --- /dev/null +++ b/sysdeps/aarch64/fpu/feupdateenv.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2009-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> +#include <fpu_control.h> + +int +feupdateenv (const fenv_t *envp) +{ + fpu_fpsr_t fpsr; + + /* Get the current exception state. */ + _FPU_GETFPSR (fpsr); + + /* Install new environment. */ + fesetenv (envp); + + /* Raise the saved exceptions. */ + feraiseexcept (fpsr & FE_ALL_EXCEPT); + + return 0; +} +libm_hidden_def (feupdateenv) diff --git a/sysdeps/aarch64/fpu/fgetexcptflg.c b/sysdeps/aarch64/fpu/fgetexcptflg.c new file mode 100644 index 0000000000..d25da1cab9 --- /dev/null +++ b/sysdeps/aarch64/fpu/fgetexcptflg.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2001-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> +#include <fpu_control.h> + +int +fegetexceptflag (fexcept_t *flagp, int excepts) +{ + fpu_fpsr_t fpsr; + + /* Get the current exceptions. */ + _FPU_GETFPSR (fpsr); + + *flagp = fpsr & excepts & FE_ALL_EXCEPT; + + return 0; +} diff --git a/sysdeps/aarch64/fpu/fpu_control.h b/sysdeps/aarch64/fpu/fpu_control.h new file mode 100644 index 0000000000..6a265e89b5 --- /dev/null +++ b/sysdeps/aarch64/fpu/fpu_control.h @@ -0,0 +1,84 @@ +/* Copyright (C) 1996-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/>. */ + +#ifndef _AARCH64_FPU_CONTROL_H +#define _AARCH64_FPU_CONTROL_H + +/* Macros for accessing the FPCR and FPSR. */ + +#define _FPU_GETCW(fpcr) \ + __asm__ __volatile__ ("mrs %0, fpcr" : "=r" (fpcr)) + +#define _FPU_SETCW(fpcr) \ + { \ + __asm__ __volatile__ ("msr fpcr, %0" : : "r" (fpcr)); \ + __asm__ __volatile__ ("isb"); \ + } + +#define _FPU_GETFPSR(fpsr) \ + __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (fpsr)) + +#define _FPU_SETFPSR(fpsr) \ + __asm__ __volatile__ ("msr fpsr, %0" : : "r" (fpsr)) + +/* Reserved bits should be preserved when modifying register + contents. These two masks indicate which bits in each of FPCR and + FPSR should not be changed. */ + +#define _FPU_RESERVED 0xfe0fe0ff +#define _FPU_FPSR_RESERVED 0x0fffffe0 + +#define _FPU_DEFAULT 0x00000000 +#define _FPU_FPSR_DEFAULT 0x00000000 + +/* Layout of FPCR and FPSR: + + | | | | | | | | + 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 + s s s s s s s s s s s + c c c c c c c c c c c c + N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I + C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O + P O O R R Z N N N E K K E E E E E C K K C C C C C + D D I I P + E E D D + E E + */ + +#define _FPU_FPCR_RM_MASK 0xc00000 + +#define _FPU_FPCR_MASK_IXE 0x1000 +#define _FPU_FPCR_MASK_UFE 0x0800 +#define _FPU_FPCR_MASK_OFE 0x0400 +#define _FPU_FPCR_MASK_DZE 0x0200 +#define _FPU_FPCR_MASK_IOE 0x0100 + +#define _FPU_FPCR_IEEE \ + (_FPU_DEFAULT | _FPU_FPCR_MASK_IXE | \ + _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \ + _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE) + +#define _FPU_FPSR_IEEE 0 + +typedef unsigned int fpu_control_t; +typedef unsigned int fpu_fpsr_t; + +/* Default control word set at startup. */ +extern fpu_control_t __fpu_control; + +#endif diff --git a/sysdeps/aarch64/fpu/fraiseexcpt.c b/sysdeps/aarch64/fpu/fraiseexcpt.c new file mode 100644 index 0000000000..3e5c118677 --- /dev/null +++ b/sysdeps/aarch64/fpu/fraiseexcpt.c @@ -0,0 +1,92 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> +#include <float.h> + +int +feraiseexcept (int excepts) +{ + int fpsr; + const float fp_zero = 0.0; + const float fp_one = 1.0; + const float fp_max = FLT_MAX; + const float fp_min = FLT_MIN; + const float fp_1e32 = 1.0e32f; + const float fp_two = 2.0; + const float fp_three = 3.0; + + /* Raise exceptions represented by EXCEPTS. But we must raise only + one signal at a time. It is important that if the OVERFLOW or + UNDERFLOW exception and the inexact exception are given at the + same time, the OVERFLOW or UNDERFLOW exception precedes the + INEXACT exception. + + After each exception we read from the FPSR, to force the + exception to be raised immediately. */ + + if (FE_INVALID & excepts) + __asm__ __volatile__ ( + "ldr s0, %1\n\t" + "fdiv s0, s0, s0\n\t" + "mrs %0, fpsr" : "=r" (fpsr) + : "m" (fp_zero) + : "d0"); + + if (FE_DIVBYZERO & excepts) + __asm__ __volatile__ ( + "ldr s0, %1\n\t" + "ldr s1, %2\n\t" + "fdiv s0, s0, s1\n\t" + "mrs %0, fpsr" : "=r" (fpsr) + : "m" (fp_one), "m" (fp_zero) + : "d0", "d1"); + + if (FE_OVERFLOW & excepts) + /* There's no way to raise overflow without also raising inexact. */ + __asm__ __volatile__ ( + "ldr s0, %1\n\t" + "ldr s1, %2\n\t" + "fadd s0, s0, s1\n\t" + "mrs %0, fpsr" : "=r" (fpsr) + : "m" (fp_max), "m" (fp_1e32) + : "d0", "d1"); + + if (FE_UNDERFLOW & excepts) + __asm__ __volatile__ ( + "ldr s0, %1\n\t" + "ldr s1, %2\n\t" + "fdiv s0, s0, s1\n\t" + "mrs %0, fpsr" : "=r" (fpsr) + : "m" (fp_min), "m" (fp_three) + : "d0", "d1"); + + if (FE_INEXACT & excepts) + __asm__ __volatile__ ( + "ldr s0, %1\n\t" + "ldr s1, %2\n\t" + "fdiv s0, s0, s1\n\t" + "mrs %0, fpsr" : "=r" (fpsr) + : "m" (fp_two), "m" (fp_three) + : "d0", "d1"); + + return 0; +} + +libm_hidden_def (feraiseexcept) diff --git a/sysdeps/aarch64/fpu/fsetexcptflg.c b/sysdeps/aarch64/fpu/fsetexcptflg.c new file mode 100644 index 0000000000..49cd1e467f --- /dev/null +++ b/sysdeps/aarch64/fpu/fsetexcptflg.c @@ -0,0 +1,39 @@ +/* Copyright (C) 1997-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> +#include <math.h> +#include <fpu_control.h> + +int +fesetexceptflag (const fexcept_t *flagp, int excepts) +{ + fpu_fpsr_t fpsr; + + /* Get the current environment. */ + _FPU_GETFPSR (fpsr); + + /* Set the desired exception mask. */ + fpsr &= ~(excepts & FE_ALL_EXCEPT); + fpsr |= (*flagp & excepts & FE_ALL_EXCEPT); + + /* Save state back to the FPU. */ + _FPU_SETFPSR (fpsr); + + return 0; +} diff --git a/sysdeps/aarch64/fpu/ftestexcept.c b/sysdeps/aarch64/fpu/ftestexcept.c new file mode 100644 index 0000000000..73e01d4388 --- /dev/null +++ b/sysdeps/aarch64/fpu/ftestexcept.c @@ -0,0 +1,32 @@ +/* Copyright (C) 1997-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> +#include <fpu_control.h> + +int +fetestexcept (int excepts) +{ + fpu_fpsr_t fpsr; + + /* Get current exceptions. */ + _FPU_GETFPSR (fpsr); + + return fpsr & excepts & FE_ALL_EXCEPT; +} +libm_hidden_def (fetestexcept) diff --git a/sysdeps/aarch64/fpu/get-rounding-mode.h b/sysdeps/aarch64/fpu/get-rounding-mode.h new file mode 100644 index 0000000000..5c1615d04c --- /dev/null +++ b/sysdeps/aarch64/fpu/get-rounding-mode.h @@ -0,0 +1,38 @@ +/* Determine floating-point rounding mode within libc. AArch64 version. + + Copyright (C) 2012-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/>. */ + +#ifndef _AARCH64_GET_ROUNDING_MODE_H +#define _AARCH64_GET_ROUNDING_MODE_H 1 + +#include <fenv.h> +#include <fpu_control.h> + +/* Return the floating-point rounding mode. */ + +static inline int +get_rounding_mode (void) +{ + fpu_control_t fpcr; + + _FPU_GETCW (fpcr); + return fpcr & FE_TOWARDZERO; +} + +#endif /* get-rounding-mode.h */ diff --git a/sysdeps/aarch64/fpu/s_ceil.c b/sysdeps/aarch64/fpu/s_ceil.c new file mode 100644 index 0000000000..5a85b51867 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_ceil.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC ceil +#define INSN "frintp" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_ceilf.c b/sysdeps/aarch64/fpu/s_ceilf.c new file mode 100644 index 0000000000..70be6067d8 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_ceilf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC ceilf +#define INSN "frintp" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/fpu/s_floor.c b/sysdeps/aarch64/fpu/s_floor.c new file mode 100644 index 0000000000..d7a2f48780 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_floor.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC floor +#define INSN "frintm" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_floorf.c b/sysdeps/aarch64/fpu/s_floorf.c new file mode 100644 index 0000000000..b2dc9be4a2 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_floorf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC floorf +#define INSN "frintm" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/fpu/s_fma.c b/sysdeps/aarch64/fpu/s_fma.c new file mode 100644 index 0000000000..adbcfc1db1 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fma.c @@ -0,0 +1,45 @@ +/* Copyright (C) 1996-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 <math.h> + +#ifndef FUNC +# define FUNC fma +#endif + +#ifndef TYPE +# define TYPE double +# define REGS "d" +#else +# ifndef REGS +# error REGS not defined +# endif +#endif + +#define __CONCATX(a,b) __CONCAT(a,b) + +TYPE +__CONCATX(__,FUNC) (TYPE x, TYPE y, TYPE z) +{ + TYPE result; + asm ( "fmadd" "\t%" REGS "0, %" REGS "1, %" REGS "2, %" REGS "3" + : "=w" (result) : "w" (x), "w" (y), "w" (z) ); + return result; +} + +weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_fmaf.c b/sysdeps/aarch64/fpu/s_fmaf.c new file mode 100644 index 0000000000..38c5888738 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fmaf.c @@ -0,0 +1,22 @@ +/* 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/>. */ + +#define FUNC fmaf +#define TYPE float +#define REGS "s" +#include <s_fma.c> diff --git a/sysdeps/aarch64/fpu/s_fmax.c b/sysdeps/aarch64/fpu/s_fmax.c new file mode 100644 index 0000000000..37dc9703e7 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fmax.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC fmax +#define INSN "fmaxnm" +#include <s_fmin.c> diff --git a/sysdeps/aarch64/fpu/s_fmaxf.c b/sysdeps/aarch64/fpu/s_fmaxf.c new file mode 100644 index 0000000000..748ac0f807 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fmaxf.c @@ -0,0 +1,23 @@ +/* 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/>. */ + +#define FUNC fmaxf +#define INSN "fmaxnm" +#define TYPE float +#define REGS "s" +#include <s_fmin.c> diff --git a/sysdeps/aarch64/fpu/s_fmin.c b/sysdeps/aarch64/fpu/s_fmin.c new file mode 100644 index 0000000000..63875d5761 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fmin.c @@ -0,0 +1,49 @@ +/* Copyright (C) 1996-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 <math.h> + +#ifndef FUNC +# define FUNC fmin +#endif + +#ifndef INSN +# define INSN "fminnm" +#endif + +#ifndef TYPE +# define TYPE double +# define REGS "d" +#else +# ifndef REGS +# error REGS not defined +# endif +#endif + +#define __CONCATX(a,b) __CONCAT(a,b) + +TYPE +__CONCATX(__,FUNC) (TYPE x, TYPE y) +{ + TYPE result; + asm ( INSN "\t%" REGS "0, %" REGS "1, %" REGS "2" + : "=w" (result) : "w" (x), "w" (y) ); + return result; +} + +weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_fminf.c b/sysdeps/aarch64/fpu/s_fminf.c new file mode 100644 index 0000000000..86c6be2947 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_fminf.c @@ -0,0 +1,22 @@ +/* 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/>. */ + +#define FUNC fminf +#define TYPE float +#define REGS "s" +#include <s_fmin.c> diff --git a/sysdeps/aarch64/fpu/s_frint.c b/sysdeps/aarch64/fpu/s_frint.c new file mode 100644 index 0000000000..2e8195c67d --- /dev/null +++ b/sysdeps/aarch64/fpu/s_frint.c @@ -0,0 +1,49 @@ +/* Copyright (C) 1996-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 <math.h> + +#ifndef FUNC +# error FUNC not defined +#endif + +#ifndef TYPE +# define TYPE double +# define REGS "d" +#else +# ifndef REGS +# error REGS not defined +# endif +#endif + +#ifndef INSN +# error INSN not defined +#endif + +#define __CONCATX(a,b) __CONCAT(a,b) + +TYPE +__CONCATX(__,FUNC) (TYPE x) +{ + TYPE result; + asm ( INSN "\t%" REGS "0, %" REGS "1" : + "=w" (result) : "w" (x) ); + return result; +} + +weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_frintf.c b/sysdeps/aarch64/fpu/s_frintf.c new file mode 100644 index 0000000000..817d2d11a9 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_frintf.c @@ -0,0 +1,24 @@ +/* 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/>. */ + +#ifndef FUNC +# error FUNC not defined +#endif +#define TYPE float +#define REGS "s" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_llrint.c b/sysdeps/aarch64/fpu/s_llrint.c new file mode 100644 index 0000000000..487452fb62 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_llrint.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC llrint +#define OTYPE long long int +#include <s_lrint.c> diff --git a/sysdeps/aarch64/fpu/s_llrintf.c b/sysdeps/aarch64/fpu/s_llrintf.c new file mode 100644 index 0000000000..1a0009d407 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_llrintf.c @@ -0,0 +1,23 @@ +/* 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/>. */ + +#define FUNC llrintf +#define ITYPE float +#define IREGS "s" +#define OTYPE long long int +#include <s_lrint.c> diff --git a/sysdeps/aarch64/fpu/s_llround.c b/sysdeps/aarch64/fpu/s_llround.c new file mode 100644 index 0000000000..90615358a1 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_llround.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC llround +#define OTYPE long long int +#include <s_lround.c> diff --git a/sysdeps/aarch64/fpu/s_llroundf.c b/sysdeps/aarch64/fpu/s_llroundf.c new file mode 100644 index 0000000000..c4c7149396 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_llroundf.c @@ -0,0 +1,23 @@ +/* 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/>. */ + +#define FUNC llroundf +#define ITYPE float +#define IREGS "s" +#define OTYPE long long int +#include <s_lround.c> diff --git a/sysdeps/aarch64/fpu/s_lrint.c b/sysdeps/aarch64/fpu/s_lrint.c new file mode 100644 index 0000000000..8ff9520b77 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_lrint.c @@ -0,0 +1,53 @@ +/* Copyright (C) 1996-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 <math.h> + +#ifndef FUNC +# define FUNC lrint +#endif + +#ifndef ITYPE +# define ITYPE double +# define IREGS "d" +#else +# ifndef IREGS +# error IREGS not defined +# endif +#endif + +#ifndef OTYPE +# define OTYPE long int +#endif + +#define OREGS "x" + +#define __CONCATX(a,b) __CONCAT(a,b) + +OTYPE +__CONCATX(__,FUNC) (ITYPE x) +{ + OTYPE result; + ITYPE temp; + asm ( "frintx" "\t%" IREGS "1, %" IREGS "2\n\t" + "fcvtzs" "\t%" OREGS "0, %" IREGS "1" + : "=r" (result), "=w" (temp) : "w" (x) ); + return result; +} + +weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_lrintf.c b/sysdeps/aarch64/fpu/s_lrintf.c new file mode 100644 index 0000000000..8ed38fe016 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_lrintf.c @@ -0,0 +1,22 @@ +/* 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/>. */ + +#define FUNC lrintf +#define ITYPE float +#define IREGS "s" +#include <s_lrint.c> diff --git a/sysdeps/aarch64/fpu/s_lround.c b/sysdeps/aarch64/fpu/s_lround.c new file mode 100644 index 0000000000..e1f4a2076d --- /dev/null +++ b/sysdeps/aarch64/fpu/s_lround.c @@ -0,0 +1,51 @@ +/* Copyright (C) 1996-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 <math.h> + +#ifndef FUNC +# define FUNC lround +#endif + +#ifndef ITYPE +# define ITYPE double +# define IREGS "d" +#else +# ifndef IREGS +# error IREGS not defined +# endif +#endif + +#ifndef OTYPE +# define OTYPE long int +#endif + +#define OREGS "x" + +#define __CONCATX(a,b) __CONCAT(a,b) + +OTYPE +__CONCATX(__,FUNC) (ITYPE x) +{ + OTYPE result; + asm ( "fcvtas" "\t%" OREGS "0, %" IREGS "1" + : "=r" (result) : "w" (x) ); + return result; +} + +weak_alias (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/aarch64/fpu/s_lroundf.c b/sysdeps/aarch64/fpu/s_lroundf.c new file mode 100644 index 0000000000..4970954d9f --- /dev/null +++ b/sysdeps/aarch64/fpu/s_lroundf.c @@ -0,0 +1,22 @@ +/* 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/>. */ + +#define FUNC lroundf +#define ITYPE float +#define IREGS "s" +#include <s_lround.c> diff --git a/sysdeps/aarch64/fpu/s_nearbyint.c b/sysdeps/aarch64/fpu/s_nearbyint.c new file mode 100644 index 0000000000..c130b83401 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_nearbyint.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC nearbyint +#define INSN "frinti" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_nearbyintf.c b/sysdeps/aarch64/fpu/s_nearbyintf.c new file mode 100644 index 0000000000..e09f162995 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_nearbyintf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC nearbyintf +#define INSN "frinti" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/fpu/s_rint.c b/sysdeps/aarch64/fpu/s_rint.c new file mode 100644 index 0000000000..f1ded8ec8b --- /dev/null +++ b/sysdeps/aarch64/fpu/s_rint.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC rint +#define INSN "frintx" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_rintf.c b/sysdeps/aarch64/fpu/s_rintf.c new file mode 100644 index 0000000000..a950c765ec --- /dev/null +++ b/sysdeps/aarch64/fpu/s_rintf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC rintf +#define INSN "frintx" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/fpu/s_round.c b/sysdeps/aarch64/fpu/s_round.c new file mode 100644 index 0000000000..40411a5c44 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_round.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC round +#define INSN "frinta" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_roundf.c b/sysdeps/aarch64/fpu/s_roundf.c new file mode 100644 index 0000000000..05f0e9603d --- /dev/null +++ b/sysdeps/aarch64/fpu/s_roundf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC roundf +#define INSN "frinta" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/fpu/s_trunc.c b/sysdeps/aarch64/fpu/s_trunc.c new file mode 100644 index 0000000000..2ffd899ab3 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_trunc.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC trunc +#define INSN "frintz" +#include <s_frint.c> diff --git a/sysdeps/aarch64/fpu/s_truncf.c b/sysdeps/aarch64/fpu/s_truncf.c new file mode 100644 index 0000000000..10e69cae48 --- /dev/null +++ b/sysdeps/aarch64/fpu/s_truncf.c @@ -0,0 +1,21 @@ +/* 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/>. */ + +#define FUNC truncf +#define INSN "frintz" +#include <s_frintf.c> diff --git a/sysdeps/aarch64/jmpbuf-offsets.h b/sysdeps/aarch64/jmpbuf-offsets.h new file mode 100644 index 0000000000..bcf2afa555 --- /dev/null +++ b/sysdeps/aarch64/jmpbuf-offsets.h @@ -0,0 +1,60 @@ +/* Copyright (C) 2006-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/>. */ + +#define JB_X19 0 +#define JB_X20 1 +#define JB_X21 2 +#define JB_X22 3 +#define JB_X23 4 +#define JB_X24 5 +#define JB_X25 6 +#define JB_X26 7 +#define JB_X27 8 +#define JB_X28 9 +#define JB_X29 10 +#define JB_LR 11 +#define JB_SP 13 + +#define JB_D8 14 +#define JB_D9 15 +#define JB_D10 16 +#define JB_D11 17 +#define JB_D12 18 +#define JB_D13 19 +#define JB_D14 20 +#define JB_D15 21 + +#ifndef __ASSEMBLER__ +#include <setjmp.h> +#include <stdint.h> +#include <sysdep.h> + +static inline uintptr_t __attribute__ ((unused)) +_jmpbuf_sp (__jmp_buf jmpbuf) +{ + uintptr_t sp = jmpbuf[JB_SP]; +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (sp); +#endif + return sp; +} +#endif + +/* Helper for generic ____longjmp_chk(). */ +#define JB_FRAME_ADDRESS(buf) \ + ((void *) _jmpbuf_sp (buf)) diff --git a/sysdeps/aarch64/jmpbuf-unwind.h b/sysdeps/aarch64/jmpbuf-unwind.h new file mode 100644 index 0000000000..39a5dc2c75 --- /dev/null +++ b/sysdeps/aarch64/jmpbuf-unwind.h @@ -0,0 +1,36 @@ +/* Copyright (C) 2005-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 <setjmp.h> +#include <jmpbuf-offsets.h> +#include <stdint.h> +#include <unwind.h> + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ + ((void *) (address) < (void *) demangle (jmpbuf[JB_SP])) + +#define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \ + _JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) _Unwind_GetCFA (context), adj) + +#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ + ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) + +/* We use the normal longjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/aarch64/ldsodefs.h b/sysdeps/aarch64/ldsodefs.h new file mode 100644 index 0000000000..f55608c271 --- /dev/null +++ b/sysdeps/aarch64/ldsodefs.h @@ -0,0 +1,48 @@ +/* Copyright (C) 2005-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/>. */ + +#ifndef _AARCH64_LDSODEFS_H +#define _AARCH64_LDSODEFS_H 1 + +#include <elf.h> + +struct La_aarch64_regs; +struct La_aarch64_retval; + +#define ARCH_PLTENTER_MEMBERS \ + ElfW(Addr) (*aarch64_gnu_pltenter) (ElfW(Sym) *, \ + unsigned int, \ + uintptr_t *, \ + uintptr_t *, \ + struct La_aarch64_regs *, \ + unsigned int *, \ + const char *, \ + long int *) + +#define ARCH_PLTEXIT_MEMBERS \ + ElfW(Addr) (*aarch64_gnu_pltexit) (ElfW(Sym) *, \ + unsigned int, \ + uintptr_t *, \ + uintptr_t *, \ + const struct La_aarch64_regs *, \ + struct La_aarch64_retval *, \ + const char *) + +#include_next <ldsodefs.h> + +#endif diff --git a/sysdeps/aarch64/libc-tls.c b/sysdeps/aarch64/libc-tls.c new file mode 100644 index 0000000000..c67ef277a7 --- /dev/null +++ b/sysdeps/aarch64/libc-tls.c @@ -0,0 +1,32 @@ +/* Copyright (C) 2005-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 <csu/libc-tls.c> +#include <dl-tls.h> + +/* On AArch64, linker optimizations are not required, so __tls_get_addr + can be called even in statically linked binaries. In this case module + must be always 1 and PT_TLS segment exist in the binary, otherwise it + would not link. */ + +void * +__tls_get_addr (tls_index *ti) +{ + dtv_t *dtv = THREAD_DTV (); + return (char *) dtv[1].pointer.val + ti->ti_offset; +} diff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps new file mode 100644 index 0000000000..786720dbe1 --- /dev/null +++ b/sysdeps/aarch64/libm-test-ulps @@ -0,0 +1,18858 @@ +# Begin of automatic generation + +# acos_downward +Test "acos_downward (-0x8p-4)": +float: 1 +ifloat: 1 +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 +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 "asin_downward (0x8p-4)": +float: 1 +ifloat: 1 +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 +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 +ildouble: 1 +ldouble: 1 +Test "asin_towardzero (-0x8p-972)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "asin_towardzero (-0xf.fffffp-4)": +ildouble: 1 +ldouble: 1 +Test "asin_towardzero (0x8p-4)": +float: 1 +ifloat: 1 +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 +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 +Test "asin_upward (-0x8p-16448)": +ildouble: 1 +ldouble: 1 +Test "asin_upward (-0x8p-4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "asin_upward (-0x8p-972)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +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_upward (-0xf.fffffffffffffffp-4)": +ildouble: 1 +ldouble: 1 +Test "asin_upward (-0xf.fffffffffffp-4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "asin_upward (-0xf.fffffp-4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 +ildouble: 1 +ldouble: 1 +Test "asin_upward (0x4p-128)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 +Test "asin_upward (0x8p-16448)": +ildouble: 1 +ldouble: 1 +Test "asin_upward (0x8p-972)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +# 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 "asinh (0xf.ffffffffffff8p+1020)": +double: 1 +Test "asinh (0xf.fffffp+124)": +ldouble: 1 + +# atan +Test "atan (0xap+0)": +double: 1 +idouble: 1 + +# atan2 +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 (-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 (-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 (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 (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 (-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 + +# cacos +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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (+0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (+0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + +0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 + 0x1.fp-129 i)": +double: 1 +idouble: 1 +Test "Real part of: cacos (-0.5 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 + 0x1p-105 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 + 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 + 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 - 0x1.fp-129 i)": +double: 1 +idouble: 1 +Test "Real part of: cacos (-0.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 - 0x1p-105 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 - 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 - 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1000 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-105 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-105 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-23 + 0.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-23 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-23 - 0.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-23 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 "Imaginary part of: cacos (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 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 "Imaginary part of: cacos (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-0x1p-63 - 0x1p-63 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (-0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-1.0 + 0x1p50 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (-1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-1.0 - 0x1p50 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (-1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (-1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (-2 - 3 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.25 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.25 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.5 + 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 + 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 + 0x1p-63 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacos (0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0.5 - 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 - 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.5 - 0x1p-63 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacos (0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.fffffffffffff8p0 + 0.0 i)": +double: 1 +idouble: 1 +Test "Real part of: cacos (0x0.fffffffffffff8p0 + 0x1.fp-1025 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.fffffffffffff8p0 - 0.0 i)": +double: 1 +idouble: 1 +Test "Real part of: cacos (0x0.fffffffffffff8p0 - 0x1.fp-1025 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.ffffffffffffffffffffffffffcp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffffffffffffffffffffffff8p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffp0 + 0.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffp0 + 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffp0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Real part of: cacos (0x0.ffffffp0 - 0.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffp0 - 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x0.ffffffp0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 2 +ldouble: 2 +Test "Real part of: cacos (0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 2 +ldouble: 2 +Test "Real part of: cacos (0x1.0000000000001p0 + 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.0000000000001p0 - 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.000002p0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.000002p0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-100 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1.fp-100 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-100 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1000 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-129 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-30 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1.fp-30 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-105 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacos (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-105 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacos (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-112 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacos (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-112 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacos (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacos (0x1p-23 + 0x0.ffffffp0 i)": +double: 1 +idouble: 1 +Test "Real 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 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacos (0x1p-23 - 0x0.ffffffp0 i)": +double: 1 +idouble: 1 +Test "Real part of: cacos (0x1p-23 - 0x1.000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-52 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-52 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-52 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-52 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-52 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-52 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-63 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-63 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0x1p-63 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-63 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacos (0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (1.0 + 0x1.fp-100 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (1.0 + 0x1.fp-30 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacos (1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (1.0 - 0x1.fp-100 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (1.0 - 0x1.fp-30 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacos (1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacos (1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 + +# cacosh +Test "Real part of: cacosh (+0 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (+0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.25 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.25 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Imaginary part of: cacosh (-0.5 + +0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 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)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 + 0x1p-105 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 + 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 + 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 + 1.0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacosh (-0.5 - 0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 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)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 - 0x1p-105 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 - 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 - 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0.5 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-129 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1.fp-129 - 1.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1.fp-30 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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 "Real part of: cacosh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-23 + 0.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-23 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-23 - 0.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-23 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-23 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 "Real part of: cacosh (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 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 "Real part of: cacosh (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-0x1p-63 - 0x1p-63 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (-0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-1.0 + 0x1p50 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (-1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-1.0 - 0x1p50 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (-1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (-1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (-2 - 3 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.25 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.25 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0.5 + 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0.5 - 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0.5 - 1.0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacosh (0x0.fffffffffffff8p0 + 0.0 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacosh (0x0.fffffffffffff8p0 + 0x1.fp-1025 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.fffffffffffff8p0 - 0.0 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: cacosh (0x0.fffffffffffff8p0 - 0x1.fp-1025 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.ffffffffffffffffffffffffffcp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffffffffffffffffffffffff8p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffp0 + 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x0.ffffffp0 - 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacosh (0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: cacosh (0x1.0000000000001p0 + 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.0000000000001p0 - 0x1p-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.000002p0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.000002p0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.fp-100 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-100 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1.fp-100 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1000 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-129 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-30 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1.fp-30 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-105 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-105 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Real part of: cacosh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-112 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacosh (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-112 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: cacosh (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: cacosh (0x1p-23 + 0x0.ffffffp0 i)": +double: 1 +idouble: 1 +Test "Imaginary 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 +ildouble: 2 +ldouble: 2 +Test "Real part of: cacosh (0x1p-23 - 0x0.ffffffp0 i)": +double: 1 +idouble: 1 +Test "Imaginary 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-52 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-52 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-52 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-52 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (0x1p-52 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 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)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 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)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (1.0 + 0x1.fp-10 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: cacosh (1.0 + 0x1.fp-100 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (1.0 + 0x1.fp-30 i)": +double: 1 +idouble: 1 +Test "Real part of: cacosh (1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (1.0 - 0x1.fp-10 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: cacosh (1.0 - 0x1.fp-100 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: cacosh (1.0 - 0x1.fp-30 i)": +double: 1 +idouble: 1 +Test "Real part of: cacosh (1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 + +# casin +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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (+0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (+0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.25 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.25 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 + 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 + 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 + 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 + 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casin (-0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 - 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 - 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 - 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 - 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casin (-0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0.5 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0.5 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.fffffffffffff8p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 + 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Real part of: casin (-0x0.fffffffffffff8p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.fffffffffffff8p0 - 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffp0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Real part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x0.ffffffp0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1.fp-10 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-100 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1000 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-129 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1.fp-30 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-30 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1.fp-30 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1.fp-30 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-105 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-105 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (-0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-23 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (-0x1p-23 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-52 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-52 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-52 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-52 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-52 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-52 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-63 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-63 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-1.0 + 0.25 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-1.0 + 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-1.0 - 0.25 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (-1.0 - 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (-1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.0 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.25 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.25 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 + 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 + 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 + 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 + 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casin (0.5 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 - 0x1p-112 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 - 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 - 0x1p-23 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 - 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casin (0.5 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.5 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0.5 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: casin (0x0.fffffffffffff8p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.fffffffffffff8p0 + 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Real part of: casin (0x0.fffffffffffff8p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.fffffffffffff8p0 - 0x1p-52 i)": +double: 1 +idouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-112 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x0.ffffffp0 + 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffp0 + 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Real part of: casin (0x0.ffffffp0 - 0x1p-23 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x0.ffffffp0 - 0x1p-23 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.000002p0 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.000002p0 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1.fp-10 + 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-100 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1000 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1000 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-10000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-10000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-1025 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 + 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-129 - 1.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 + 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-16385 - 1.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1.fp-30 + 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-30 + 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1.fp-30 - 1.0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1.fp-30 - 1.0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-105 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-105 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 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-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (0x1p-23 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-23 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casin (0x1p-23 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-52 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-52 + 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-52 + 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-52 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-52 - 0.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-52 - 0x1.0000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-63 + 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-63 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-63 - 0.5 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: casin (0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p-63 - 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (1.0 + 0.25 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (1.0 + 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 + 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (1.0 - 0.25 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (1.0 - 0x1.fp-129 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 - 0x1.fp-30 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casin (1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 + +# casinh +Test "Imaginary part of: casinh (-0.0 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.0 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.25 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.25 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 + +0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 + 0x1.fp-129 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casinh (-0.5 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (-0.5 + 0x1p-52 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.5 + 0x1p-52 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 - 0x1.fp-129 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casinh (-0.5 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (-0.5 - 0x1p-52 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0.5 - 0x1p-52 i)": +ildouble: 1 +ldouble: 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 "Imaginary part of: casinh (-0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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 "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000001p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000001p0 + 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.0000000000001p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.0000000000001p0 - 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.000002p0 + 0x1p-23 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.000002p0 - 0x1p-23 i)": +double: 1 +float: 1 +idouble: 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-10 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-129 + 0.5 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-129 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-129 - 0.5 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-129 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-30 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1.fp-30 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-105 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-105 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-112 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-112 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-112 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-112 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-23 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casinh (-0x1p-23 + 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 + 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-23 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casinh (-0x1p-23 - 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-23 - 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-0x1p-52 + 0.5 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (-0x1p-52 + 0x0.fffffffffffff8p0 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (-0x1p-52 - 0.5 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (-0x1p-52 - 0x0.fffffffffffff8p0 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (-0x1p-63 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-63 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + +0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0.25 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-1.0 + 0.5 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1.fp-100 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1.fp-1000 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1.fp-30 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-1.0 + 0x1.fp-30 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0.25 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-1.0 - 0.5 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1.fp-100 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1.fp-1000 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1.fp-30 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (-1.0 - 0x1.fp-30 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 + +0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 + 0x1.fp-1025 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 + 0x1.fp-129 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 - 0x1.fp-1025 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 - 0x1.fp-129 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (-1.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.0 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.0 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.0 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.0 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.0 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.0 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.25 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.25 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 + +0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 + 0x1.fp-129 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casinh (0.5 + 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (0.5 + 0x1p-52 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.5 + 0x1p-52 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 - 0x1.fp-129 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 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 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: casinh (0.5 - 0x1p-23 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: casinh (0.5 - 0x1p-52 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.5 - 0x1p-52 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0.75 + 1.25 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x0.fffffffffffff8p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x0.fffffffffffff8p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 + 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffffffffffffcp0 - 0x1p-105 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x0.ffffffffffffffffp0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 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 "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000000000000000000001p0 + 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000000000000000000001p0 - 0x1p-113 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000000002p0 + 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000000002p0 - 0x1p-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000001p0 + 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000001p0 + 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000001p0 + 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000001p0 - 0.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.0000000000001p0 - 0x1.fp-1025 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.0000000000001p0 - 0x1p-52 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.000002p0 + 0x1p-23 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.000002p0 - 0x1p-23 i)": +double: 1 +float: 1 +idouble: 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-10 - 1.0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.fp-1025 + 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.fp-1025 - 0x0.fffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-129 + 0.5 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (0x1.fp-129 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-129 - 0.5 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (0x1.fp-129 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.fp-16385 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-16385 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1.fp-16385 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-16385 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-30 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1.fp-30 - 1.0 i)": +ildouble: 1 +ldouble: 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 (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-105 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-105 + 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-105 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-105 - 0x0.ffffffffffffffffffffffffffcp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-112 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-112 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-112 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-112 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-112 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-112 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-113 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-113 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-23 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casinh (0x1p-23 + 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 + 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-23 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": +float: 2 +ifloat: 2 +Test "Imaginary part of: casinh (0x1p-23 - 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-23 - 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (0x1p-52 + 0.5 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (0x1p-52 + 0x0.fffffffffffff8p0 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: casinh (0x1p-52 - 0.5 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (0x1p-52 - 0x0.fffffffffffff8p0 i)": +double: 1 +idouble: 1 +Test "Real part of: casinh (0x1p-63 + 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-63 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-63 - 0.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p-63 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p500 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p500 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p5000 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (0x1p5000 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + +0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0.25 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (1.0 + 0.5 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1.fp-100 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1.fp-1000 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1.fp-30 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (1.0 + 0x1.fp-30 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 + 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0.25 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (1.0 - 0.5 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1.fp-100 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1.fp-1000 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1.fp-129 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1.fp-30 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: casinh (1.0 - 0x1.fp-30 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1p500 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.0 - 0x1p5000 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 + +0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 + 0x1.fp-1025 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 + 0x1.fp-129 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 - 0x1.fp-1025 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 - 0x1.fp-129 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: casinh (1.5 - 0x1.fp-16385 i)": +ildouble: 1 +ldouble: 1 + +# catan +Test "Imaginary part of: catan (-0x0.fffffffffffff8p0 + 0x1p-27 i)": +double: 1 +idouble: 1 +Test "Real part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-57 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x0.ffffffp0 + 0x1p-126 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x0.ffffffp0 + 0x1p-13 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x0.ffffffp0 - 0x1p-126 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 + 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 - 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.0000000000000000000000000001p0 - 0x1p-57 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 (-0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1.fp16383 - 0x1.fp16383 i)": +ildouble: 1 +ldouble: 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-16380 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-0x1p-16380 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x1p-33 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x1p-33 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-0x1p-33 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real 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 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (-1.0 - 0x1p-13 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (-2 - 3 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Imaginary part of: catan (0.75 + 1.25 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x0.fffffffffffff8p0 + 0x1p-27 i)": +double: 1 +idouble: 1 +Test "Real part of: catan (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x0.ffffffffffffffffffffffffffff8p0 + 0x1p-57 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x0.ffffffffffffffffffffffffffff8p0 - 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x0.ffffffp0 + 0x1p-126 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x0.ffffffp0 + 0x1p-13 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x0.ffffffp0 - 0x1p-126 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 + 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 - 0x1p-16382 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.0000000000000000000000000001p0 - 0x1p-57 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1.fp16383 - 0x1.fp16383 i)": +ildouble: 1 +ldouble: 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-16380 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catan (0x1p-16380 - 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x1p-33 + 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x1p-33 + 0x1.0000000000000002p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (0x1p-33 - 0x0.ffffffffffffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Real 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 +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 +ildouble: 1 +ldouble: 1 +Test "Real part of: catan (1.0 - 0x1p-13 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +# catanh +Test "Imaginary part of: catanh (-0x0.ffffffffffffffffp0 + 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x0.ffffffffffffffffp0 - 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1.0000000000000002p0 + 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1.0000000000000002p0 - 0x1p-33 i)": +ildouble: 1 +ldouble: 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.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 "Real part of: catanh (-0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1.fp16383 - 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-126 + 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-126 + 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-126 - 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-126 - 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-16382 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1p-16382 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (-0x1p-16382 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1p-16382 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 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 (-0x1p-57 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (-0x1p-57 - 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 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-16380 i)": +ildouble: 1 +ldouble: 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-16380 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0.75 + 1.25 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0.75 + 1.25 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x0.ffffffffffffffffp0 + 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x0.ffffffffffffffffp0 - 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1.0000000000000002p0 + 0x1p-33 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary 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 +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 "Real part of: catanh (0x1.fp16383 + 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1.fp16383 - 0x1.fp16383 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-126 + 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-126 + 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-126 - 0x0.ffffffp0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-126 - 0x1.000002p0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-13 + 0x0.ffffffp0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-13 - 0x0.ffffffp0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-16382 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-16382 + 0x1.0000000000000000000000000001p0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: catanh (0x1p-16382 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-16382 - 0x1.0000000000000000000000000001p0 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 - 0x0.fffffffffffff8p0 i)": +double: 1 +idouble: 1 +Test "Real part of: catanh (0x1p-57 + 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: catanh (0x1p-57 - 0x0.ffffffffffffffffffffffffffff8p0 i)": +ildouble: 1 +ldouble: 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-16380 i)": +ildouble: 1 +ldouble: 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-16380 i)": +ildouble: 1 +ldouble: 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.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 (0xf.ep-4)": +double: 1 +idouble: 1 + +# ccos +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 (-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 +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 (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 "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 "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 (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 +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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ccosh (-0x2p+0 - 0x3p+0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 +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: 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 "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 "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 "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: 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: cexp (0x1.f4p+8 + 0xf.fffffp+124 i)": +ildouble: 1 +ldouble: 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 +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: 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: cexp (0x5.8cp+4 + 0xcp-4 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 + +# clog +Test "Real part of: clog (+0 + 0x4p-1076 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +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: 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: 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: 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: 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 "Real part of: clog (0x1.48e45ep-4 + 0xf.f2c64p-4 i)": +float: 1 +ifloat: 1 +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: 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: 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 "Real part of: clog (0x1.8907bc3694fd5p-4 + 0xf.ed1990460bdf8p-4 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +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 "Imaginary part of: clog (0x1.c67eccp-4 + 0xf.e6b4d1d7a6e0949p-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.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 "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 +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)": +double: 1 +idouble: 1 +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 "Imaginary part of: clog (0x2.82b795e420b2ap-4 + 0xf.cd42ap-4 i)": +double: 1 +idouble: 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.3b8f9p-4 + 0xf.ab873d09e61ep-4 i)": +double: 1 +idouble: 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 "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 "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 "Imaginary 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 "Imaginary part of: clog (0x3.bea2bcp-4 + 0xf.8e3d7p-4 i)": +double: 1 +idouble: 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: 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 "Real part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06d08p-4 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: clog (0x3.e1d0a105ac4eap-4 + 0xf.859b3d1b06dp-4 i)": +ildouble: 1 +ldouble: 1 +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)": +double: 1 +idouble: 1 +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 +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: clog (0x4.7017ap-4 + 0xf.5f4a550c9d75e3bp-4 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog (0x4.d9e8c8p-4 + 0xf.3f30281507d8p-4 i)": +double: 1 +idouble: 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 "Imaginary part of: clog (0x4.d9e8cp-4 + 0xf.3f303p-4 i)": +double: 1 +idouble: 1 +Test "Real part of: clog (0x4p-1076 + +0 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog (0x4p-1076 + 0x4p-1076 i)": +double: 1 +idouble: 1 +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)": +double: 1 +float: 1 +idouble: 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.22363bf989dap-4 i)": +double: 1 +idouble: 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 "Imaginary part of: clog (0x5.b06b680ea2ccp-4 + 0xe.f452bp-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 "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 "Real part of: clog (0x6.02fd58p-4 + 0xe.d3e21p-4 i)": +float: 1 +ifloat: 1 +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.02fd5p-4 + 0xe.d3e2p-4 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: clog (0x6.1c643068cd124p-4 + 0xe.c97c2018b4288p-4 i)": +double: 1 +idouble: 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 "Imaginary part of: clog (0x7.eca928p-4 + 0xd.e655ep-4 i)": +double: 1 +idouble: 1 +Test "Real part of: clog (0x7.eca928p-4 + 0xd.e655fp-4 i)": +float: 1 +ifloat: 1 +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 (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)": +double: 1 +idouble: 1 +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 (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.479468b09a37p-4 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog (0x8.ecbf810c4ae6p-4 + 0xd.47946p-4 i)": +double: 1 +idouble: 1 +Test "Imaginary 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)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog (0x8.ecbf9p-4 + 0xd.479468b09a37p-4 i)": +double: 1 +idouble: 1 +Test "Imaginary 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.a9cp-4 + 0xc.c0ap-4 i)": +double: 1 +idouble: 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)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog (0x9.b386fc56b9688p-4 + 0xc.b9317p-4 i)": +double: 1 +idouble: 1 +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)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog (0x9.b387p-4 + 0xc.b9317c470b408p-4 i)": +double: 1 +idouble: 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 "Imaginary part of: clog (0x9.c1b6ac509a248p-4 + 0xc.ae53dp-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)": +double: 1 +idouble: 1 +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 +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 (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.42a51a3c05c18p-4 i)": +double: 1 +idouble: 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.42a51a3c05c2p-4 i)": +double: 1 +idouble: 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 +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.e8679p-4 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: clog (0xa.afc58p-4 + 0xb.e867ap-4 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 "Imaginary 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 "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.e7de8cc868ff8p-4 + 0xb.b51ccp-4 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: clog (0xa.e7de8p-4 + 0xb.b51cb9f04d4dp-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 "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.b0f2405504a6p-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 "Imaginary part of: clog (0xa.ec55cp-4 + 0xb.b0f25p-4 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog (0xb.263a77543bp-4 + 0xb.79c9ap-4 i)": +double: 1 +idouble: 1 +Test "Imaginary 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 (0xb.263a7p-4 + 0xb.79c9bp-4 i)": +ildouble: 1 +ldouble: 1 +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)": +double: 1 +idouble: 1 +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 + 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 "Imaginary part of: clog (0xf.ffffffffffff8p+1020 + 0x8p+1020 i)": +double: 1 +idouble: 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)": +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 +ildouble: 1 +ldouble: 1 +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 +ildouble: 1 +ldouble: 1 +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 "Real part of: clog10 (-2 - 3 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (-2 - 3 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 "Imaginary part of: clog10 (0.75 + 1.25 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-1000 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1.00000000000000123456789abcp0 + 0x1.23456789p-60 i)": +ildouble: 1 +ldouble: 1 +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 +ildouble: 2 +ldouble: 2 +Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-100 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i)": +float: 1 +ifloat: 1 +Test "Real part of: clog10 (0x1.234566p-50 + 1.0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i)": +float: 1 +ifloat: 1 +Test "Real part of: clog10 (0x1.234566p-60 + 1.0 i)": +ildouble: 1 +ldouble: 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 "Imaginary part of: clog10 (0x1.fffffffffffffp+1023 + 0x1p+1023 i)": +double: 1 +idouble: 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 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i)": +double: 1 +idouble: 1 +Test "Real part of: clog10 (0x1415bcaf2105940d49a636e98ae59p-115 + 0x7e6a150adfcd1b0921d44b31f40f4p-115 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x15cfbd1990d1ffp-53 + 0x176a3973e09a9ap-53 i)": +ildouble: 1 +ldouble: 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 "Real part of: clog10 (0x1df515eb171a808b9e400266p-95 + 0x7c71eb0cd4688dfe98581c77p-95 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x1df515eb171a808b9e400266p-95 + 0x7c71eb0cd4688dfe98581c77p-95 i)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x3f96469050f650869c2p-75 + 0x6f16b2c9c8b05988335p-75 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i)": +double: 1 +idouble: 1 +Test "Real part of: clog10 (0x4d4ep-15 + 0x6605p-15 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x4d4ep-15 + 0x6605p-15 i)": +double: 1 +idouble: 1 +Test "Real part of: clog10 (0x4d9c37e2b5cb4533p-63 + 0x65c98be2385a042ep-63 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x55cb6d0c83af5p-55 + 0x7fe33c0c7c4e90p-55 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x602fd5037c4792efp-64 + 0xed3e2086dcca80b8p-64 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x6241ef0da53f539f02fad67dabp-106 + 0x3fb46641182f7efd9caa769dac0p-106 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0x659feap-24 + 0xeaf6f9p-24 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 (0x9b57bp-20 + 0xcb7b4p-20 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (0xdb85c467ee2aadd5f425fe0f4b8dp-114 + 0x3e83162a0f95f1dcbf97dddf410eap-114 i)": +ildouble: 1 +ldouble: 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 (0xfd95243681c055c2632286921092p-113 + 0x1bccabcd29ca2152860ec29e34ef7p-113 i)": +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 (-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 +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 (0xap+0)": +ildouble: 1 +ldouble: 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 (-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 +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 (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 (-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 (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 (-0x2p-16384)": +ildouble: 1 +ldouble: 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 (-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 (-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 (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 (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: 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 (-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 (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 +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 +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 "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 "cos_upward (0xf.fffffffffffffffp+16380)": +ildouble: 1 +ldouble: 1 + +# cosh +Test "cosh (-0x1p+0)": +float: 1 +ifloat: 1 +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 +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_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_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_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 (-0x1p+0)": +float: 1 +ifloat: 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 (-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 (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 (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: 5 +idouble: 1 +ifloat: 5 +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 (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 (0xcp-4 + 0x1.4p+0 i, 0xcp-4 + 0x1.4p+0 i)": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 4 +ldouble: 4 + +# csin +Test "Real part of: csin (-0.75 + 11357.25 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (-0.75 + 710.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (-0.75 + 89.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csin (-0.75 + 89.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (-0.75 - 11357.25 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (-0.75 - 710.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (-0.75 - 89.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csin (-0.75 - 89.5 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csin (-2 - 3 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 + 1.25 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 + 11357.25 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 + 710.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 + 89.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csin (0.75 + 89.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 - 11357.25 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 - 710.5 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0.75 - 89.5 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csin (0.75 - 89.5 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csin (0x1p-1074 + 1440 i)": +double: 1 +idouble: 1 +Test "Real part of: csin (0x1p-16434 + 22730 i)": +ildouble: 1 +ldouble: 1 + +# csinh +Test "Imaginary part of: csinh (-11357.25 + 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (-11357.25 - 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Real part of: csinh (-2 - 3 i)": +ildouble: 1 +ldouble: 1 +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 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (-710.5 - 0.75 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csinh (-89.5 + 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (-89.5 + 0.75 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csinh (-89.5 - 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (-89.5 - 0.75 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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 (11357.25 + 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (11357.25 - 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (1440 + 0x1p-1074 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: csinh (22730 + 0x1p-16434 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (710.5 + 0.75 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (710.5 - 0.75 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csinh (89.5 + 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (89.5 + 0.75 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: csinh (89.5 - 0.75 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csinh (89.5 - 0.75 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +# csqrt +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 "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 (-0x4p-16384 - 0x4.0000000000000008p-16384 i)": +ildouble: 1 +ldouble: 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 "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 "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 (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 (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 (0x8p+124 + 0x8p-152 i)": +double: 1 +idouble: 1 +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-152 + 0x4.0000000000000008p-16384 i)": +ildouble: 1 +ldouble: 1 +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 (-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 +ildouble: 1 +ldouble: 1 +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 (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 (0x8p+1020 + 0x1p+0 i)": +ildouble: 2 +ldouble: 2 +Test "Real part of: ctan (0x8p+124 + 0x1p+0 i)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: ctan (0x8p+124 + 0x1p+0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ctan (0x8p+16380 + 0x1p+0 i)": +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctan (0x8p+16380 + 0x1p+0 i)": +ildouble: 2 +ldouble: 2 +Test "Real part of: ctan (0xcp-4 + 0x1.4p+0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctan (0xcp-4 + 0x1.4p+0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +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 (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 (-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.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 + 0x4p-1076 i)": +ildouble: 3 +ldouble: 3 +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 (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: 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 "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 "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 "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 "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)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: ctan_tonearest (0x8p+124 + 0x1p+0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 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)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctan_tonearest (0xcp-4 + 0x1.4p+0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 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 (-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.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.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 +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 (-0x2p+0 - 0x3p+0 i)": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +ildouble: 1 +ldouble: 1 +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.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.921fb54442d19p+0 + 0x8p-16448 i)": +ildouble: 3 +ldouble: 3 +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 "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: 1 +idouble: 1 +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 "Imaginary part of: ctanh (+0 + 0x1.921fb4p+0 i)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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: 2 +idouble: 1 +ifloat: 2 +Test "Imaginary part of: ctanh (-0x2p+0 - 0x3p+0 i)": +double: 1 +idouble: 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 "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 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctanh (0x1p+0 + 0x8p+124 i)": +float: 1 +ifloat: 1 +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 (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 +idouble: 1 +Test "Imaginary part of: ctanh (0xcp-4 + 0x1.4p+0 i)": +float: 1 +ifloat: 1 + +# 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_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 +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_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 "Real part of: ctanh_downward (-0x2p+0 - 0x3p+0 i)": +double: 4 +idouble: 4 +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_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: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctanh_downward (0x1p+0 + 0x8p+124 i)": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +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_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 "Imaginary part of: ctanh_downward (0x1p+0 + 0xf.fffffp+124 i)": +double: 4 +float: 5 +idouble: 4 +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 "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 "Real part of: ctanh_downward (0x4p-1076 + 0x1.921fb54442d1846ap+0 i)": +ildouble: 1 +ldouble: 1 +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 (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 "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 (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: 2 +idouble: 1 +ifloat: 2 +Test "Imaginary part of: ctanh_tonearest (-0x2p+0 - 0x3p+0 i)": +double: 1 +idouble: 1 +Test "Imaginary part of: ctanh_tonearest (0x1.63p+8 + 0x1p+0 i)": +ildouble: 2 +ldouble: 2 +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 +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 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctanh_tonearest (0x1p+0 + 0x8p+124 i)": +float: 1 +ifloat: 1 +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 (0x4p-1076 + 0x1.921fb54442d18p+0 i)": +ildouble: 3 +ldouble: 3 +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 (0x8p-152 + 0x1.921fb6p+0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 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: 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 +idouble: 1 +Test "Imaginary part of: ctanh_tonearest (0xcp-4 + 0x1.4p+0 i)": +float: 1 +ifloat: 1 + +# 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.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 "Imaginary part of: ctanh_towardzero (+0 + 0xc.90fdap-4 i)": +float: 2 +ifloat: 2 +Test "Real part of: ctanh_towardzero (-0x2p+0 - 0x3p+0 i)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +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 "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: 5 +idouble: 5 +ildouble: 2 +ldouble: 2 +Test "Real part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: ctanh_towardzero (0x1p+0 + 0x8p+124 i)": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +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 "Imaginary part of: ctanh_towardzero (0x1p+0 + 0xf.fffffp+124 i)": +double: 3 +float: 2 +idouble: 3 +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 (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 +ildouble: 1 +ldouble: 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.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 "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)": +float: 2 +ifloat: 2 +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 +float: 1 +idouble: 1 +ifloat: 1 +Test "Imaginary part of: ctanh_upward (0x1p+0 + 0x8p+124 i)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +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: 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 +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 "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 "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 +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 (0xcp-4 + 0x1.4p+0 i)": +float: 1 +ifloat: 1 +Test "Imaginary part of: ctanh_upward (0xcp-4 + 0x1.4p+0 i)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +# erf +Test "erf (-0x7.ffffffffffffcp-4)": +ildouble: 1 +ldouble: 1 +Test "erf (0x1.4p+0)": +double: 1 +idouble: 1 + +# erfc +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 (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 (0x7.fffd6p+0)": +float: 1 +ifloat: 1 +Test "erfc (0x7.ffff2p+0)": +ildouble: 1 +ldouble: 1 +Test "erfc (0xcp-4)": +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 +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 "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 +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 "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 (-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 +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_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 "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 "expm1_towardzero (-0x1p-100)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x1p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_towardzero (-0x1p-64)": +double: 1 +float: 1 +idouble: 1 +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 + +# 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 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x1p-32)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "expm1_upward (-0x1p-64)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 "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 "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 (0x7.fp+4)": +ildouble: 1 +ldouble: 1 +Test "expm1_upward (0x8p-32)": +float: 1 +ifloat: 1 + +# gamma +Test "gamma (-0x1p-20)": +double: 1 +idouble: 1 +Test "gamma (-0x1p-40)": +ildouble: 1 +ldouble: 1 +Test "gamma (-0x1p-64)": +ildouble: 1 +ldouble: 1 +Test "gamma (-0x2p-16)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 +ildouble: 1 +ldouble: 1 +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 "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 (-0x4p+0)": +double: 1 +float: 1 +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 (0x2p+0)": +ildouble: 2 +ldouble: 2 +Test "j0 (0x4p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "j0 (0x4p+16380)": +ildouble: 1 +ldouble: 1 +Test "j0 (0x8p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (0xe.be71dp+104)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "j0 (0xf.ffffffffffff8p+1020)": +ildouble: 1 +ldouble: 1 +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 (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 (0x4p+16380)": +ildouble: 1 +ldouble: 1 +Test "j1 (0x8p+0)": +double: 1 +idouble: 1 +ildouble: 4 +ldouble: 4 +Test "j1 (0x8p+1020)": +ildouble: 1 +ldouble: 1 +Test "j1 (0x8p+16380)": +ildouble: 2 +ldouble: 2 +Test "j1 (0xap+0)": +float: 2 +ifloat: 2 +ildouble: 2 +ldouble: 2 +Test "j1 (0xcp-4)": +ildouble: 1 +ldouble: 1 +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 +ildouble: 1 +ldouble: 1 +Test "jn (0, 0x2p+0)": +ildouble: 2 +ldouble: 2 +Test "jn (0, 0x4p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "jn (0, 0x8p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "jn (0, 0xap+0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "jn (1, 0x1p+0)": +ildouble: 1 +ldouble: 1 +Test "jn (1, 0x2p+0)": +double: 1 +idouble: 1 +Test "jn (1, 0x8p+0)": +double: 1 +idouble: 1 +ildouble: 4 +ldouble: 4 +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, 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, 0xap+0)": +float: 2 +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 (2, 0x2.67a2a4p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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: 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 (2, 0xf.fffb1p+96)": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +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 +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, 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 (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, 0x2p-4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "jn (3, 0xap+0)": +double: 3 +idouble: 3 +ildouble: 2 +ldouble: 2 +Test "jn (3, 0xcp-4)": +double: 1 +idouble: 1 +Test "jn (4, 0x2.67a2a4p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (4, 0x2.67a2a5d2e368p+0)": +double: 1 +idouble: 1 +Test "jn (4, 0x2.67a2a8p+0)": +double: 1 +float: 1 +idouble: 1 +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 (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)": +double: 1 +float: 2 +idouble: 1 +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 +idouble: 4 +ildouble: 3 +ldouble: 3 +Test "jn (6, 0x2.67a2a8p+0)": +float: 3 +ifloat: 3 +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 (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 +idouble: 3 +ildouble: 2 +ldouble: 2 +Test "jn (7, 0x2.67a2a8p+0)": +float: 3 +ifloat: 3 +Test "jn (8, 0x2.67a2a4p+0)": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +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 +idouble: 1 +Test "jn (8, 0x2.67a2a5d2e368p+0)": +double: 3 +idouble: 3 +Test "jn (8, 0x2.67a2a8p+0)": +double: 1 +float: 4 +idouble: 1 +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: 2 +float: 3 +idouble: 2 +ifloat: 3 + +# lgamma +Test "lgamma (-0x1p-20)": +double: 1 +idouble: 1 +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 (-0x4p-12)": +double: 1 +idouble: 1 +Test "lgamma (-0x4p-32)": +ildouble: 1 +ldouble: 1 +Test "lgamma (-0x8p-28)": +ildouble: 1 +ldouble: 1 +Test "lgamma (-0x8p-4)": +ildouble: 1 +ldouble: 1 +Test "lgamma (-0x8p-8)": +double: 1 +idouble: 1 +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 (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 +ildouble: 1 +ldouble: 1 + +# log1p +Test "log1p (0x1.b7e151628aed2p+0)": +ildouble: 1 +ldouble: 1 +Test "log1p (0x1.b7e15p+0)": +float: 1 +ifloat: 1 + +# log2 +Test "log2 (0x2.b7e151628aed2a6cp+0)": +ildouble: 1 +ldouble: 1 +Test "log2 (0xcp-4)": +ildouble: 1 +ldouble: 1 + +# pow +Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde02468acf1357p+124)": +ildouble: 1 +ldouble: 1 +Test "pow (0x1.0000000000000000000000000001p+0, 0x2.468acf13579bde04p+124)": +ildouble: 1 +ldouble: 1 +Test "pow (0x1.0000000000001p+0, -0x2.468adp+60)": +ildouble: 1 +ldouble: 1 +Test "pow (0xap+0, -0x1.342p+12)": +ildouble: 1 +ldouble: 1 +Test "pow (0xap+0, 0x1.341p+12)": +ildouble: 1 +ldouble: 1 +Test "pow (0xap+0, 0x1.342p+12)": +ildouble: 1 +ldouble: 1 +Test "pow (0xap+0, 0x1.343p+12)": +ildouble: 1 +ldouble: 1 +Test "pow (0xap+0, 0x1.344p+12)": +ildouble: 1 +ldouble: 1 +Test "pow (0xd.72cb2a95c7ef6cce81bf1e825ba8p+16380, 0xcp-4)": +ildouble: 1 +ldouble: 1 +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)": +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +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 (0x3p+0)": +double: 1 +idouble: 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 (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)": +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 +ifloat: 1 + +# pow_upward +Test "pow_upward (1.0625, 1.125)": +float: 1 +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 +Test "sin (0xc.d4967p-4)": +float: 1 +ifloat: 1 + +# sin_downward +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 +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 (-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 (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 +Test "sin_tonearest (0xc.d4967p-4)": +float: 1 +ifloat: 1 + +# sin_towardzero +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 (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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "sin_towardzero (0x3.be735c19beap+0)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +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 (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 (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 (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 (-0x1.921fb4p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "sin_upward (-0x1.921fb54442d18468p+0)": +ildouble: 1 +ldouble: 1 +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 (-0x1.921fb6p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (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 +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 +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 +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 +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 +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 "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 "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 +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 "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 "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 1": +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 (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 "tan (0x3p+0)": +ildouble: 1 +ldouble: 1 +Test "tan (0x6p+0)": +ildouble: 1 +ldouble: 1 + +# tan_downward +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 (-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 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "tan_downward (-0xc.91p-4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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_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_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_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 (-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 +ildouble: 2 +ldouble: 2 +Test "tan_upward (-0xc.90ep-4)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (-0xc.91p-4)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (-0xc.ap-4)": +ildouble: 1 +ldouble: 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 +Test "tan_upward (0x2p+64)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tan_upward (0x4p+0)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 +Test "tan_upward (0x9p+0)": +double: 1 +idouble: 1 +Test "tan_upward (0xap+0)": +double: 1 +idouble: 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 +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 +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 +ifloat: 1 +ildouble: 1 +ldouble: 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 +ildouble: 1 +ldouble: 1 + +# tanh +Test "tanh (-0x1p+0)": +ildouble: 1 +ldouble: 1 +Test "tanh (-0xcp-4)": +ildouble: 1 +ldouble: 1 +Test "tanh (0x1p+0)": +ildouble: 1 +ldouble: 1 +Test "tanh (0xcp-4)": +ildouble: 1 +ldouble: 1 + +# tgamma +Test "tgamma (-0x1.0000000000000002p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.0000000000001p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.000002p+0)": +double: 2 +idouble: 2 +Test "tgamma (-0x1.3ffffep+4)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.3ffffffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.3fffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.3ffffffffffffp+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x1.4000000000000000000000000001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.4000000000001p+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.400002p+4)": +float: 1 +ifloat: 1 +ildouble: 4 +ldouble: 4 +Test "tgamma (-0x1.dffffep+4)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.dfffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.dffffffffffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.e000000000000000000000000001p+4)": +ildouble: 3 +ldouble: 3 +Test "tgamma (-0x1.e00000000000000000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.e000000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.e000000000001p+4)": +double: 3 +idouble: 3 +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 (-0x1.f3ffffffffffffffffffffffffffp+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.f3fffffffffffp+8)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x1.f40000000000000000000000008p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.f40002p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x1.fffffffffffffffep+0)": +ildouble: 1 +ldouble: 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.0000000000002p+0)": +double: 1 +idouble: 1 +Test "tgamma (-0x2.000004p+0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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 (-0x2.7ffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.7ffffffffffffffffffffffffffep+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x2.7fffffffffffffffffffffffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.8000000000000000000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.80000000000000000000000001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.8000000000002p+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.800004p+4)": +double: 2 +idouble: 2 +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x2.8fffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.8ffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.8ffffffffffffffffffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.8p+0)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "tgamma (-0x2.9000000000000000000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.90000000000000000000000001p+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x2.900004p+4)": +double: 1 +idouble: 1 +Test "tgamma (-0x2.9ffffcp+4)": +double: 1 +idouble: 1 +Test "tgamma (-0x2.9fffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.9ffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.9ffffffffffffffffffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.9fffffffffffffffffffffffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.a000000000000000000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.a000000000000004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.a000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.a00004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.edfffcp+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.edffffffffffep+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.edfffffffffffffffffffffffffep+8)": +ildouble: 1 +ldouble: 1 +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 (-0x2.ffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x2.fffffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +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 (-0x3.1fffffffffffep+4)": +double: 3 +idouble: 3 +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x3.1ffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x3.1ffffffffffffffffffffffffffep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x3.1fffffffffffffffffffffffffp+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x3.2000000000000000000000000002p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x3.2000000000000004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x3.200004p+4)": +ildouble: 1 +ldouble: 1 +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 (-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 (-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 (-0x3.fffffffffffffffffffffffffffep+0)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x4.000008p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x4.8p+0)": +double: 1 +float: 1 +idouble: 1 +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 +float: 1 +idouble: 1 +ifloat: 1 +Test "tgamma (-0x4.ffffffffffffcp+0)": +double: 1 +idouble: 1 +Test "tgamma (-0x4.fffffffffffffff8p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x4.fffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x4.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.0000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.0000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.000008p+0)": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "tgamma (-0x5.8p+0)": +double: 1 +idouble: 1 +Test "tgamma (-0x5.dbfffffffffffff8p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.dbfffffffffffffffffffffffffcp+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.dc00000000000000000000000004p+8)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x5.dc000000000000000000000002p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.dc00000000004p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.dc0008p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.fffff8p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.ffffffffffffcp+0)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.fffffffffffffff8p+0)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0x5.fffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x5.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.0000000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +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.3ffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.3fffffffffffcp+4)": +double: 2 +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.d5fff8p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.d5ffffffffffcp+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.d5fffffffffffff8p+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.d5fffffffffffffffffffffffep+8)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x6.d600000000000000000000000004p+8)": +ildouble: 1 +ldouble: 1 +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 (-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 (-0x6.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x7.0000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x7.0000000000004p+0)": +double: 3 +idouble: 3 +Test "tgamma (-0x7.000008p+0)": +double: 1 +idouble: 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 (-0x7.fffffffffffffff8p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x7.fffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x7.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x8.0000000000000000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x8.00000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x8.0000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x8.00001p+0)": +double: 2 +idouble: 2 +ildouble: 1 +ldouble: 1 +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.5ffffffffffffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x9.5ffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x9.60000000000000000000000004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0x9.600000000000001p+4)": +ildouble: 2 +ldouble: 2 +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: 2 +idouble: 1 +ifloat: 2 +Test "tgamma (-0x9.ffffffffffff8p+0)": +double: 1 +idouble: 1 +Test "tgamma (-0x9.fffffffffffffffffffffffffff8p+0)": +ildouble: 1 +ldouble: 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.c0001p+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +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 (-0xb.500000000000001p+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0xb.5000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.5ffffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.5ffffp+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0xb.60000000000000000000000004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.600000000000001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.6000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.6fffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.6ffffffffffffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.6ffffffffffffffffffffffffff8p+4)": +ildouble: 3 +ldouble: 3 +Test "tgamma (-0xb.7000000000000000000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.700000000000001p+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (-0xb.7000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.70001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.7ffffffffffffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.7ffffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +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 (-0xb.bffffffffffffffffffffffffff8p+4)": +ildouble: 4 +ldouble: 4 +Test "tgamma (-0xb.bffffp+4)": +ildouble: 1 +ldouble: 1 +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 (-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 (-0xb.cffffffffffffffffffffffffcp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.cffffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +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 (-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 (-0xb.e0001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.efffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.effffffffffffffffffffffffff8p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.effffffffffffffp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.f000000000000000000000000008p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.f0000000000000000000000004p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.f00000000000001p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xb.f0001p+4)": +ildouble: 1 +ldouble: 1 +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 (-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 +idouble: 1 +Test "tgamma (-0xf.fffffffffffffffffffffffffff8p-4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (-0xf.fffffp-4)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (0x1.28p+4)": +double: 1 +idouble: 1 +Test "tgamma (0x1.38p+4)": +double: 2 +idouble: 2 +ildouble: 1 +ldouble: 1 +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.fffffep+0)": +float: 1 +ifloat: 1 +Test "tgamma (0x1.fffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x1.ffffffffffffffffffffffffffffp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x1.fffffffffffffp+0)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (0x1p-24)": +float: 1 +ifloat: 1 +Test "tgamma (0x2.08p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x2.18p+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x2.28p+4)": +double: 1 +idouble: 1 +Test "tgamma (0x2.30a43cp+4)": +double: 1 +idouble: 1 +ildouble: 2 +ldouble: 2 +Test "tgamma (0x2.8p+0)": +float: 2 +ifloat: 2 +Test "tgamma (0x2.fffffcp+0)": +float: 3 +ifloat: 3 +Test "tgamma (0x2.ffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x3.0000000000002p+0)": +ildouble: 1 +ldouble: 1 +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.ffffffffffffep+0)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (0x3.fffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x3.fffffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x3p+0)": +float: 1 +ifloat: 1 +Test "tgamma (0x4.0000000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x4.0000000000004p+0)": +double: 1 +idouble: 1 +Test "tgamma (0x4.000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x4.8p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "tgamma (0x4.fffff8p+0)": +float: 1 +ifloat: 1 +Test "tgamma (0x4.ffffffffffffcp+0)": +double: 1 +idouble: 1 +Test "tgamma (0x4.fffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x4.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x4p+0)": +float: 1 +ifloat: 1 +Test "tgamma (0x5.0000000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x5.0000000000004p+0)": +double: 1 +idouble: 1 +Test "tgamma (0x5.000008p+0)": +float: 3 +ifloat: 3 +Test "tgamma (0x5.fffff8p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "tgamma (0x5.ffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x5.fffffffffffffff8p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x5.fffffffffffffffffffffffffep+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x6.0000000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x6.0000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x6.0000000000004p+0)": +double: 1 +idouble: 1 +Test "tgamma (0x6.000008p+0)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +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.ffffffffffffcp+0)": +double: 4 +idouble: 4 +Test "tgamma (0x6.fffffffffffffff8p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x6p+0)": +float: 1 +ifloat: 1 +Test "tgamma (0x7.0000000000000000000000000004p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x7.0000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x7.0000000000004p+0)": +double: 4 +idouble: 4 +Test "tgamma (0x7.000008p+0)": +double: 1 +idouble: 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 +ildouble: 1 +ldouble: 1 +Test "tgamma (0x7.fffffffffffffffffffffffffffcp+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x7p+0)": +double: 1 +idouble: 1 +Test "tgamma (0x8.0000000000000000000000000008p+0)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x8.0000000000008p+0)": +ildouble: 1 +ldouble: 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-116)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0x8p-4)": +float: 1 +ifloat: 1 +Test "tgamma (0x8p-56)": +double: 1 +idouble: 1 +Test "tgamma (0x9.8p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (0x9p+0)": +double: 1 +idouble: 1 +Test "tgamma (0xa.b9fd72b0fb238p+4)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "tgamma (0xa.b9fd72b0fb23a9ddbf0d3804f8p+4)": +ildouble: 2 +ldouble: 2 +Test "tgamma (0xa.b9fd72b0fb23a9dp+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0xa.b9fd72b0fb23a9ep+4)": +ildouble: 1 +ldouble: 1 +Test "tgamma (0xa.b9fd7p+4)": +double: 2 +idouble: 2 +Test "tgamma (0xap+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +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 "y0 (0x1.ff00000000002p+840)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y0 (0x1p+0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "y0 (0x1p-100)": +ildouble: 1 +ldouble: 1 +Test "y0 (0x1p-20)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y0 (0x1p-40)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y0 (0x1p-60)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "y0 (0x1p-80)": +double: 1 +idouble: 1 +Test "y0 (0x2p+0)": +double: 1 +idouble: 1 +Test "y0 (0x4.ffcp+72)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y0 (0x4p+16380)": +ildouble: 1 +ldouble: 1 +Test "y0 (0x4p-112)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y0 (0x4p-12)": +ildouble: 1 +ldouble: 1 +Test "y0 (0x4p-32)": +float: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "y0 (0x4p-72)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y0 (0x8p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "y0 (0x8p+1020)": +ildouble: 1 +ldouble: 1 +Test "y0 (0x8p+16380)": +ildouble: 2 +ldouble: 2 +Test "y0 (0xap+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 3 +ldouble: 3 +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 +ildouble: 1 +ldouble: 1 +Test "y1 (0x1p-100)": +ildouble: 1 +ldouble: 1 +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 (0x4p-112)": +ildouble: 1 +ldouble: 1 +Test "y1 (0x4p-12)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y1 (0x4p-32)": +ildouble: 1 +ldouble: 1 +Test "y1 (0x4p-72)": +ildouble: 1 +ldouble: 1 +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 (0x9.3f102p+96)": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "y1 (0xap+0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "y1 (0xf.ffffffffffff8p+1020)": +ildouble: 1 +ldouble: 1 +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)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +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, 0x2p+0)": +double: 1 +idouble: 1 +Test "yn (0, 0x8p+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "yn (0, 0xap+0)": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 3 +ldouble: 3 +Test "yn (1, 0x1.8p+0)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +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, 0xap+0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +Test "yn (10, 0x1p+0)": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 +Test "yn (10, 0x2p+0)": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "yn (10, 0x2p-4)": +double: 1 +idouble: 1 +ildouble: 2 +ldouble: 2 +Test "yn (10, 0xap+0)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +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 (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 (2, 0xf.fffb1p+96)": +double: 1 +idouble: 1 +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 +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, 0xcp-4)": +ildouble: 2 +ldouble: 2 + +# Maximal error of functions: +Function: "acos_downward": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "acos_towardzero": +float: 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 + +Function: "asin_downward": +double: 1 +float: 1 +idouble: 1 +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 +ldouble: 1 + +Function: "atan": +double: 1 +idouble: 1 + +Function: "atan2": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "atanh": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "cacos": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Imaginary part of "cacos": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Real part of "cacosh": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Imaginary part of "cacosh": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Real part of "casin": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 + +Function: Imaginary part of "casin": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Real part of "casinh": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: Imaginary part of "casinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 + +Function: Real part of "catan": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "catanh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "catanh": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "cbrt": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "cexp": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "cexp": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: Real part of "clog": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "clog": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "clog10": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "clog10": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 + +Function: "cos": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "cos_downward": +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: 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: 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: 2 + +Function: "cosh_upward": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 1 +ldouble: 3 + +Function: Real part of "cpow": +double: 2 +float: 5 +idouble: 2 +ifloat: 5 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "cpow": +float: 2 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: Real part of "csin": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "csin": +ildouble: 1 +ldouble: 1 + +Function: Real part of "csinh": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "csqrt": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Imaginary part of "csqrt": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 3 +ldouble: 3 + +Function: Imaginary part of "ctan": +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": +double: 5 +float: 3 +idouble: 5 +ifloat: 3 +ildouble: 4 +ldouble: 4 + +Function: Imaginary part of "ctan_towardzero": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 5 +ldouble: 5 + +Function: Real part of "ctan_upward": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +ildouble: 5 +ldouble: 5 + +Function: Imaginary part of "ctan_upward": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +ildouble: 3 +ldouble: 3 + +Function: Real part of "ctanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 3 +ldouble: 3 + +Function: Imaginary part of "ctanh": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +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: 6 +float: 5 +idouble: 6 +ifloat: 5 +ildouble: 4 +ldouble: 4 + +Function: Real part of "ctanh_tonearest": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 3 +ldouble: 3 + +Function: Imaginary part of "ctanh_tonearest": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 + +Function: Real part of "ctanh_towardzero": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 5 +ldouble: 5 + +Function: Imaginary part of "ctanh_towardzero": +double: 5 +float: 2 +idouble: 5 +ifloat: 2 +ildouble: 3 +ldouble: 3 + +Function: Real part of "ctanh_upward": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +ildouble: 3 +ldouble: 3 + +Function: Imaginary part of "ctanh_upward": +double: 2 +float: 3 +idouble: 2 +ifloat: 3 +ildouble: 5 +ldouble: 5 + +Function: "erf": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +Function: "erfc": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "exp10": +double: 1 +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: "expm1_downward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "expm1_tonearest": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "expm1_towardzero": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "expm1_upward": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +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 +float: 2 +idouble: 2 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: "j1": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 4 +ldouble: 4 + +Function: "jn": +double: 4 +float: 4 +idouble: 4 +ifloat: 4 +ildouble: 7 +ldouble: 7 + +Function: "lgamma": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "log": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "log10": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +ildouble: 1 +ldouble: 1 + +Function: "log1p": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "log2": +ildouble: 1 +ldouble: 1 + +Function: "pow": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "pow10": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +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 + +Function: "pow_upward": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +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 +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: 3 +ldouble: 3 + +Function: "sincos": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +Function: "sinh_downward": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +Function: "sinh_towardzero": +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_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: 2 +ldouble: 2 + +Function: "tanh": +ildouble: 1 +ldouble: 1 + +Function: "tgamma": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 +ildouble: 4 +ldouble: 4 + +Function: "y0": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 3 +ldouble: 3 + +Function: "y1": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 2 +ldouble: 2 + +Function: "yn": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 4 +ldouble: 4 + +# end of automatic generation diff --git a/sysdeps/aarch64/machine-gmon.h b/sysdeps/aarch64/machine-gmon.h new file mode 100644 index 0000000000..b9d8f0ecce --- /dev/null +++ b/sysdeps/aarch64/machine-gmon.h @@ -0,0 +1,34 @@ +/* AArch64 definitions for profiling support. + Copyright (C) 1996-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/>. */ + +/* Accept 'frompc' address as argument from the function that calls + __mcount for profiling. Use __builtin_return_address (0) + for the 'selfpc' address. */ + +#include <sysdep.h> + +static void mcount_internal (u_long frompc, u_long selfpc); + +#define _MCOUNT_DECL(frompc, selfpc) \ +static inline void mcount_internal (u_long frompc, u_long selfpc) + +#define MCOUNT \ +void __mcount (void *frompc) \ +{ \ + mcount_internal ((u_long) frompc, (u_long) RETURN_ADDRESS (0)); \ +} diff --git a/sysdeps/aarch64/mcount.c b/sysdeps/aarch64/mcount.c new file mode 100644 index 0000000000..3201e41a1e --- /dev/null +++ b/sysdeps/aarch64/mcount.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2013-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 <shlib-compat.h> + +#include <gmon/mcount.c> + +/* We forgot to add _mcount in glibc 2.17. We added it in 2.18 + therefore we want it to be added with version GLIBC_2_18. However, + setting the version is not straight forward because a generic + Version file includes an earlier 2.xx version for each this symbol + and the linker uses the first version it sees. */ + +#if SHLIB_COMPAT (libc, GLIBC_2_17, GLIBC_2_18) +versioned_symbol (libc, __mcount, _mcount, GLIBC_2_18); +#else +strong_alias (__mcount, _mcount); +#endif diff --git a/sysdeps/aarch64/memcmp.S b/sysdeps/aarch64/memcmp.S new file mode 100644 index 0000000000..6a62a4bb32 --- /dev/null +++ b/sysdeps/aarch64/memcmp.S @@ -0,0 +1,151 @@ +/* memcmp - compare memory + + Copyright (C) 2013-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 <sysdep.h> + +/* Assumptions: + * + * ARMv8-a, AArch64 + */ + +/* Parameters and result. */ +#define src1 x0 +#define src2 x1 +#define limit x2 +#define result x0 + +/* Internal variables. */ +#define data1 x3 +#define data1w w3 +#define data2 x4 +#define data2w w4 +#define has_nul x5 +#define diff x6 +#define endloop x7 +#define tmp1 x8 +#define tmp2 x9 +#define tmp3 x10 +#define pos x11 +#define limit_wd x12 +#define mask x13 + +ENTRY_ALIGN (memcmp, 6) + cbz limit, L(ret0) + eor tmp1, src1, src2 + tst tmp1, #7 + b.ne L(misaligned8) + ands tmp1, src1, #7 + b.ne L(mutual_align) + add limit_wd, limit, #7 + lsr limit_wd, limit_wd, #3 + /* Start of performance-critical section -- one 64B cache line. */ +L(loop_aligned): + ldr data1, [src1], #8 + ldr data2, [src2], #8 +L(start_realigned): + subs limit_wd, limit_wd, #1 + eor diff, data1, data2 /* Non-zero if differences found. */ + csinv endloop, diff, xzr, ne /* Last Dword or differences. */ + cbz endloop, L(loop_aligned) + /* End of performance-critical section -- one 64B cache line. */ + + /* Not reached the limit, must have found a diff. */ + cbnz limit_wd, L(not_limit) + + /* Limit % 8 == 0 => all bytes significant. */ + ands limit, limit, #7 + b.eq L(not_limit) + + lsl limit, limit, #3 /* Bits -> bytes. */ + mov mask, #~0 +#ifdef __AARCH64EB__ + lsr mask, mask, limit +#else + lsl mask, mask, limit +#endif + bic data1, data1, mask + bic data2, data2, mask + + orr diff, diff, mask +L(not_limit): + +#ifndef __AARCH64EB__ + rev diff, diff + rev data1, data1 + rev data2, data2 +#endif + /* The MS-non-zero bit of DIFF marks either the first bit + that is different, or the end of the significant data. + Shifting left now will bring the critical information into the + top bits. */ + clz pos, diff + lsl data1, data1, pos + lsl data2, data2, pos + /* But we need to zero-extend (char is unsigned) the value and then + perform a signed 32-bit subtraction. */ + lsr data1, data1, #56 + sub result, data1, data2, lsr #56 + RET + +L(mutual_align): + /* Sources are mutually aligned, but are not currently at an + alignment boundary. Round down the addresses and then mask off + the bytes that precede the start point. */ + bic src1, src1, #7 + bic src2, src2, #7 + add limit, limit, tmp1 /* Adjust the limit for the extra. */ + lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ + ldr data1, [src1], #8 + neg tmp1, tmp1 /* Bits to alignment -64. */ + ldr data2, [src2], #8 + mov tmp2, #~0 +#ifdef __AARCH64EB__ + /* Big-endian. Early bytes are at MSB. */ + lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#else + /* Little-endian. Early bytes are at LSB. */ + lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#endif + add limit_wd, limit, #7 + orr data1, data1, tmp2 + orr data2, data2, tmp2 + lsr limit_wd, limit_wd, #3 + b L(start_realigned) + +L(ret0): + mov result, #0 + RET + + .p2align 6 +L(misaligned8): + sub limit, limit, #1 +1: + /* Perhaps we can do better than this. */ + ldrb data1w, [src1], #1 + ldrb data2w, [src2], #1 + subs limit, limit, #1 + ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ + b.eq 1b + sub result, data1, data2 + RET +END (memcmp) +#undef bcmp +weak_alias (memcmp, bcmp) +libc_hidden_builtin_def (memcmp) diff --git a/sysdeps/aarch64/memcpy.S b/sysdeps/aarch64/memcpy.S new file mode 100644 index 0000000000..caf2ab2e4f --- /dev/null +++ b/sysdeps/aarch64/memcpy.S @@ -0,0 +1,176 @@ +/* Copyright (C) 2012-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/>. */ + +/* Assumptions: + * + * ARMv8-a, AArch64 + * Unaligned accesses + * + */ + +#define dstin x0 +#define src x1 +#define count x2 +#define tmp1 x3 +#define tmp1w w3 +#define tmp2 x4 +#define tmp2w w4 +#define tmp3 x5 +#define tmp3w w5 +#define dst x6 + +#define A_l x7 +#define A_h x8 +#define B_l x9 +#define B_h x10 +#define C_l x11 +#define C_h x12 +#define D_l x13 +#define D_h x14 + +#include <sysdep.h> + +ENTRY_ALIGN (memcpy, 6) + + mov dst, dstin + cmp count, #64 + b.ge L(cpy_not_short) + cmp count, #15 + b.le L(tail15tiny) + + /* Deal with small copies quickly by dropping straight into the + * exit block. */ +L(tail63): + /* Copy up to 48 bytes of data. At this point we only need the + * bottom 6 bits of count to be accurate. */ + ands tmp1, count, #0x30 + b.eq L(tail15) + add dst, dst, tmp1 + add src, src, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + ldp A_l, A_h, [src, #-48] + stp A_l, A_h, [dst, #-48] +1: + ldp A_l, A_h, [src, #-32] + stp A_l, A_h, [dst, #-32] +2: + ldp A_l, A_h, [src, #-16] + stp A_l, A_h, [dst, #-16] + +L(tail15): + ands count, count, #15 + beq 1f + add src, src, count + ldp A_l, A_h, [src, #-16] + add dst, dst, count + stp A_l, A_h, [dst, #-16] +1: + RET + +L(tail15tiny): + /* Copy up to 15 bytes of data. Does not assume additional data + being copied. */ + tbz count, #3, 1f + ldr tmp1, [src], #8 + str tmp1, [dst], #8 +1: + tbz count, #2, 1f + ldr tmp1w, [src], #4 + str tmp1w, [dst], #4 +1: + tbz count, #1, 1f + ldrh tmp1w, [src], #2 + strh tmp1w, [dst], #2 +1: + tbz count, #0, 1f + ldrb tmp1w, [src] + strb tmp1w, [dst] +1: + RET + +L(cpy_not_short): + /* We don't much care about the alignment of DST, but we want SRC + * to be 128-bit (16 byte) aligned so that we don't cross cache line + * boundaries on both loads and stores. */ + neg tmp2, src + ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ + b.eq 2f + sub count, count, tmp2 + /* Copy more data than needed; it's faster than jumping + * around copying sub-Quadword quantities. We know that + * it can't overrun. */ + ldp A_l, A_h, [src] + add src, src, tmp2 + stp A_l, A_h, [dst] + add dst, dst, tmp2 + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le L(tail63) +2: + subs count, count, #128 + b.ge L(cpy_body_large) + /* Less than 128 bytes to copy, so handle 64 here and then jump + * to the tail. */ + ldp A_l, A_h, [src] + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48] + stp A_l, A_h, [dst] + stp B_l, B_h, [dst, #16] + stp C_l, C_h, [dst, #32] + stp D_l, D_h, [dst, #48] + tst count, #0x3f + add src, src, #64 + add dst, dst, #64 + b.ne L(tail63) + RET + + /* Critical loop. Start at a new cache line boundary. Assuming + * 64 bytes per line this ensures the entire loop is in one line. */ + .p2align 6 +L(cpy_body_large): + /* There are at least 128 bytes to copy. */ + ldp A_l, A_h, [src, #0] + sub dst, dst, #16 /* Pre-bias. */ + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48]! /* src += 64 - Pre-bias. */ +1: + stp A_l, A_h, [dst, #16] + ldp A_l, A_h, [src, #16] + stp B_l, B_h, [dst, #32] + ldp B_l, B_h, [src, #32] + stp C_l, C_h, [dst, #48] + ldp C_l, C_h, [src, #48] + stp D_l, D_h, [dst, #64]! + ldp D_l, D_h, [src, #64]! + subs count, count, #64 + b.ge 1b + stp A_l, A_h, [dst, #16] + stp B_l, B_h, [dst, #32] + stp C_l, C_h, [dst, #48] + stp D_l, D_h, [dst, #64] + add src, src, #16 + add dst, dst, #64 + 16 + tst count, #0x3f + b.ne L(tail63) + RET +END (memcpy) +libc_hidden_builtin_def (memcpy) diff --git a/sysdeps/aarch64/memmove.S b/sysdeps/aarch64/memmove.S new file mode 100644 index 0000000000..4227b7f729 --- /dev/null +++ b/sysdeps/aarch64/memmove.S @@ -0,0 +1,312 @@ +/* Copyright (C) 2012-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 <sysdep.h> + +/* Assumptions: + * + * ARMv8-a, AArch64 + * Unaligned accesses + */ + +/* Parameters and result. */ +#define dstin x0 +#define src x1 +#define count x2 +#define tmp1 x3 +#define tmp1w w3 +#define tmp2 x4 +#define tmp2w w4 +#define tmp3 x5 +#define tmp3w w5 +#define dst x6 + +#define A_l x7 +#define A_h x8 +#define B_l x9 +#define B_h x10 +#define C_l x11 +#define C_h x12 +#define D_l x13 +#define D_h x14 + +ENTRY_ALIGN (memmove, 6) + + cmp dstin, src + b.lo L(downwards) + add tmp1, src, count + cmp dstin, tmp1 + b.hs memcpy /* No overlap. */ + + /* Upwards move with potential overlap. + * Need to move from the tail backwards. SRC and DST point one + * byte beyond the remaining data to move. */ + add dst, dstin, count + add src, src, count + cmp count, #64 + b.ge L(mov_not_short_up) + + /* Deal with small moves quickly by dropping straight into the + * exit block. */ +L(tail63up): + /* Move up to 48 bytes of data. At this point we only need the + * bottom 6 bits of count to be accurate. */ + ands tmp1, count, #0x30 + b.eq L(tail15up) + sub dst, dst, tmp1 + sub src, src, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + ldp A_l, A_h, [src, #32] + stp A_l, A_h, [dst, #32] +1: + ldp A_l, A_h, [src, #16] + stp A_l, A_h, [dst, #16] +2: + ldp A_l, A_h, [src] + stp A_l, A_h, [dst] +L(tail15up): + /* Move up to 15 bytes of data. Does not assume additional data + * being moved. */ + tbz count, #3, 1f + ldr tmp1, [src, #-8]! + str tmp1, [dst, #-8]! +1: + tbz count, #2, 1f + ldr tmp1w, [src, #-4]! + str tmp1w, [dst, #-4]! +1: + tbz count, #1, 1f + ldrh tmp1w, [src, #-2]! + strh tmp1w, [dst, #-2]! +1: + tbz count, #0, 1f + ldrb tmp1w, [src, #-1] + strb tmp1w, [dst, #-1] +1: + RET + +L(mov_not_short_up): + /* We don't much care about the alignment of DST, but we want SRC + * to be 128-bit (16 byte) aligned so that we don't cross cache line + * boundaries on both loads and stores. */ + ands tmp2, src, #15 /* Bytes to reach alignment. */ + b.eq 2f + sub count, count, tmp2 + /* Move enough data to reach alignment; unlike memcpy, we have to + * be aware of the overlap, which means we can't move data twice. */ + tbz tmp2, #3, 1f + ldr tmp1, [src, #-8]! + str tmp1, [dst, #-8]! +1: + tbz tmp2, #2, 1f + ldr tmp1w, [src, #-4]! + str tmp1w, [dst, #-4]! +1: + tbz tmp2, #1, 1f + ldrh tmp1w, [src, #-2]! + strh tmp1w, [dst, #-2]! +1: + tbz tmp2, #0, 1f + ldrb tmp1w, [src, #-1]! + strb tmp1w, [dst, #-1]! +1: + + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le L(tail63up) +2: + subs count, count, #128 + b.ge L(mov_body_large_up) + /* Less than 128 bytes to move, so handle 64 here and then jump + * to the tail. */ + ldp A_l, A_h, [src, #-64]! + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48] + stp A_l, A_h, [dst, #-64]! + stp B_l, B_h, [dst, #16] + stp C_l, C_h, [dst, #32] + stp D_l, D_h, [dst, #48] + tst count, #0x3f + b.ne L(tail63up) + RET + + /* Critical loop. Start at a new Icache line boundary. Assuming + * 64 bytes per line this ensures the entire loop is in one line. */ + .p2align 6 +L(mov_body_large_up): + /* There are at least 128 bytes to move. */ + ldp A_l, A_h, [src, #-16] + ldp B_l, B_h, [src, #-32] + ldp C_l, C_h, [src, #-48] + ldp D_l, D_h, [src, #-64]! +1: + stp A_l, A_h, [dst, #-16] + ldp A_l, A_h, [src, #-16] + stp B_l, B_h, [dst, #-32] + ldp B_l, B_h, [src, #-32] + stp C_l, C_h, [dst, #-48] + ldp C_l, C_h, [src, #-48] + stp D_l, D_h, [dst, #-64]! + ldp D_l, D_h, [src, #-64]! + subs count, count, #64 + b.ge 1b + stp A_l, A_h, [dst, #-16] + stp B_l, B_h, [dst, #-32] + stp C_l, C_h, [dst, #-48] + stp D_l, D_h, [dst, #-64]! + tst count, #0x3f + b.ne L(tail63up) + RET + +L(downwards): + /* For a downwards move we can safely use memcpy provided that + * DST is more than 16 bytes away from SRC. */ + sub tmp1, src, #16 + cmp dstin, tmp1 + b.ls memcpy /* May overlap, but not critically. */ + + mov dst, dstin /* Preserve DSTIN for return value. */ + cmp count, #64 + b.ge L(mov_not_short_down) + + /* Deal with small moves quickly by dropping straight into the + * exit block. */ +L(tail63down): + /* Move up to 48 bytes of data. At this point we only need the + * bottom 6 bits of count to be accurate. */ + ands tmp1, count, #0x30 + b.eq L(tail15down) + add dst, dst, tmp1 + add src, src, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + ldp A_l, A_h, [src, #-48] + stp A_l, A_h, [dst, #-48] +1: + ldp A_l, A_h, [src, #-32] + stp A_l, A_h, [dst, #-32] +2: + ldp A_l, A_h, [src, #-16] + stp A_l, A_h, [dst, #-16] +L(tail15down): + /* Move up to 15 bytes of data. Does not assume additional data + being moved. */ + tbz count, #3, 1f + ldr tmp1, [src], #8 + str tmp1, [dst], #8 +1: + tbz count, #2, 1f + ldr tmp1w, [src], #4 + str tmp1w, [dst], #4 +1: + tbz count, #1, 1f + ldrh tmp1w, [src], #2 + strh tmp1w, [dst], #2 +1: + tbz count, #0, 1f + ldrb tmp1w, [src] + strb tmp1w, [dst] +1: + RET + +L(mov_not_short_down): + /* We don't much care about the alignment of DST, but we want SRC + * to be 128-bit (16 byte) aligned so that we don't cross cache line + * boundaries on both loads and stores. */ + neg tmp2, src + ands tmp2, tmp2, #15 /* Bytes to reach alignment. */ + b.eq 2f + sub count, count, tmp2 + /* Move enough data to reach alignment; unlike memcpy, we have to + * be aware of the overlap, which means we can't move data twice. */ + tbz tmp2, #3, 1f + ldr tmp1, [src], #8 + str tmp1, [dst], #8 +1: + tbz tmp2, #2, 1f + ldr tmp1w, [src], #4 + str tmp1w, [dst], #4 +1: + tbz tmp2, #1, 1f + ldrh tmp1w, [src], #2 + strh tmp1w, [dst], #2 +1: + tbz tmp2, #0, 1f + ldrb tmp1w, [src], #1 + strb tmp1w, [dst], #1 +1: + + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le L(tail63down) +2: + subs count, count, #128 + b.ge L(mov_body_large_down) + /* Less than 128 bytes to move, so handle 64 here and then jump + * to the tail. */ + ldp A_l, A_h, [src] + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48] + stp A_l, A_h, [dst] + stp B_l, B_h, [dst, #16] + stp C_l, C_h, [dst, #32] + stp D_l, D_h, [dst, #48] + tst count, #0x3f + add src, src, #64 + add dst, dst, #64 + b.ne L(tail63down) + RET + + /* Critical loop. Start at a new cache line boundary. Assuming + * 64 bytes per line this ensures the entire loop is in one line. */ + .p2align 6 +L(mov_body_large_down): + /* There are at least 128 bytes to move. */ + ldp A_l, A_h, [src, #0] + sub dst, dst, #16 /* Pre-bias. */ + ldp B_l, B_h, [src, #16] + ldp C_l, C_h, [src, #32] + ldp D_l, D_h, [src, #48]! /* src += 64 - Pre-bias. */ +1: + stp A_l, A_h, [dst, #16] + ldp A_l, A_h, [src, #16] + stp B_l, B_h, [dst, #32] + ldp B_l, B_h, [src, #32] + stp C_l, C_h, [dst, #48] + ldp C_l, C_h, [src, #48] + stp D_l, D_h, [dst, #64]! + ldp D_l, D_h, [src, #64]! + subs count, count, #64 + b.ge 1b + stp A_l, A_h, [dst, #16] + stp B_l, B_h, [dst, #32] + stp C_l, C_h, [dst, #48] + stp D_l, D_h, [dst, #64] + add src, src, #16 + add dst, dst, #64 + 16 + tst count, #0x3f + b.ne L(tail63down) + RET +END (memmove) + +libc_hidden_builtin_def (memmove) diff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S new file mode 100644 index 0000000000..06f04be044 --- /dev/null +++ b/sysdeps/aarch64/memset.S @@ -0,0 +1,229 @@ +/* Copyright (C) 2012-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/>. */ + +/* Assumptions: + * + * ARMv8-a, AArch64 + * Unaligned accesses + * + */ + +#include <sysdep.h> + +/* By default we assume that the DC instruction can be used to zero + data blocks more efficiently. In some circumstances this might be + unsafe, for example in an asymmetric multiprocessor environment with + different DC clear lengths (neither the upper nor lower lengths are + safe to use). The feature can be disabled by defining DONT_USE_DC. + + If code may be run in a virtualized environment, then define + MAYBE_VIRT. This will cause the code to cache the system register + values rather than re-reading them each call. */ + +#define dstin x0 +#define val w1 +#define count x2 +#define tmp1 x3 +#define tmp1w w3 +#define tmp2 x4 +#define tmp2w w4 +#define zva_len_x x5 +#define zva_len w5 +#define zva_bits_x x6 + +#define A_l x7 +#define A_lw w7 +#define dst x8 +#define tmp3w w9 + +ENTRY_ALIGN (__memset, 6) + + mov dst, dstin /* Preserve return value. */ + ands A_lw, val, #255 +#ifndef DONT_USE_DC + b.eq L(zero_mem) +#endif + orr A_lw, A_lw, A_lw, lsl #8 + orr A_lw, A_lw, A_lw, lsl #16 + orr A_l, A_l, A_l, lsl #32 +L(tail_maybe_long): + cmp count, #64 + b.ge L(not_short) +L(tail_maybe_tiny): + cmp count, #15 + b.le L(tail15tiny) +L(tail63): + ands tmp1, count, #0x30 + b.eq L(tail15) + add dst, dst, tmp1 + cmp tmp1w, #0x20 + b.eq 1f + b.lt 2f + stp A_l, A_l, [dst, #-48] +1: + stp A_l, A_l, [dst, #-32] +2: + stp A_l, A_l, [dst, #-16] + +L(tail15): + and count, count, #15 + add dst, dst, count + stp A_l, A_l, [dst, #-16] /* Repeat some/all of last store. */ + RET + +L(tail15tiny): + /* Set up to 15 bytes. Does not assume earlier memory + being set. */ + tbz count, #3, 1f + str A_l, [dst], #8 +1: + tbz count, #2, 1f + str A_lw, [dst], #4 +1: + tbz count, #1, 1f + strh A_lw, [dst], #2 +1: + tbz count, #0, 1f + strb A_lw, [dst] +1: + RET + + /* Critical loop. Start at a new cache line boundary. Assuming + * 64 bytes per line, this ensures the entire loop is in one line. */ + .p2align 6 +L(not_short): + neg tmp2, dst + ands tmp2, tmp2, #15 + b.eq 2f + /* Bring DST to 128-bit (16-byte) alignment. We know that there's + * more than that to set, so we simply store 16 bytes and advance by + * the amount required to reach alignment. */ + sub count, count, tmp2 + stp A_l, A_l, [dst] + add dst, dst, tmp2 + /* There may be less than 63 bytes to go now. */ + cmp count, #63 + b.le L(tail63) +2: + sub dst, dst, #16 /* Pre-bias. */ + sub count, count, #64 +1: + stp A_l, A_l, [dst, #16] + stp A_l, A_l, [dst, #32] + stp A_l, A_l, [dst, #48] + stp A_l, A_l, [dst, #64]! + subs count, count, #64 + b.ge 1b + tst count, #0x3f + add dst, dst, #16 + b.ne L(tail63) + RET + +#ifndef DONT_USE_DC + /* For zeroing memory, check to see if we can use the ZVA feature to + * zero entire 'cache' lines. */ +L(zero_mem): + mov A_l, #0 + cmp count, #63 + b.le L(tail_maybe_tiny) + neg tmp2, dst + ands tmp2, tmp2, #15 + b.eq 1f + sub count, count, tmp2 + stp A_l, A_l, [dst] + add dst, dst, tmp2 + cmp count, #63 + b.le L(tail63) +1: + /* For zeroing small amounts of memory, it's not worth setting up + * the line-clear code. */ + cmp count, #128 + b.lt L(not_short) +#ifdef MAYBE_VIRT + /* For efficiency when virtualized, we cache the ZVA capability. */ + adrp tmp2, L(cache_clear) + ldr zva_len, [tmp2, #:lo12:L(cache_clear)] + tbnz zva_len, #31, L(not_short) + cbnz zva_len, L(zero_by_line) + mrs tmp1, dczid_el0 + tbz tmp1, #4, 1f + /* ZVA not available. Remember this for next time. */ + mov zva_len, #~0 + str zva_len, [tmp2, #:lo12:L(cache_clear)] + b L(not_short) +1: + mov tmp3w, #4 + and zva_len, tmp1w, #15 /* Safety: other bits reserved. */ + lsl zva_len, tmp3w, zva_len + str zva_len, [tmp2, #:lo12:L(cache_clear)] +#else + mrs tmp1, dczid_el0 + tbnz tmp1, #4, L(not_short) + mov tmp3w, #4 + and zva_len, tmp1w, #15 /* Safety: other bits reserved. */ + lsl zva_len, tmp3w, zva_len +#endif + +L(zero_by_line): + /* Compute how far we need to go to become suitably aligned. We're + * already at quad-word alignment. */ + cmp count, zva_len_x + b.lt L(not_short) /* Not enough to reach alignment. */ + sub zva_bits_x, zva_len_x, #1 + neg tmp2, dst + ands tmp2, tmp2, zva_bits_x + b.eq 1f /* Already aligned. */ + /* Not aligned, check that there's enough to copy after alignment. */ + sub tmp1, count, tmp2 + cmp tmp1, #64 + ccmp tmp1, zva_len_x, #8, ge /* NZCV=0b1000 */ + b.lt L(not_short) + /* We know that there's at least 64 bytes to zero and that it's safe + * to overrun by 64 bytes. */ + mov count, tmp1 +2: + stp A_l, A_l, [dst] + stp A_l, A_l, [dst, #16] + stp A_l, A_l, [dst, #32] + subs tmp2, tmp2, #64 + stp A_l, A_l, [dst, #48] + add dst, dst, #64 + b.ge 2b + /* We've overrun a bit, so adjust dst downwards. */ + add dst, dst, tmp2 +1: + sub count, count, zva_len_x +3: + dc zva, dst + add dst, dst, zva_len_x + subs count, count, zva_len_x + b.ge 3b + ands count, count, zva_bits_x + b.ne L(tail_maybe_long) + RET +#ifdef MAYBE_VIRT + .bss + .p2align 2 +L(cache_clear): + .space 4 +#endif +#endif /* DONT_USE_DC */ + +END (__memset) +weak_alias (__memset, memset) +libc_hidden_builtin_def (memset) diff --git a/sysdeps/aarch64/memusage.h b/sysdeps/aarch64/memusage.h new file mode 100644 index 0000000000..75532691e3 --- /dev/null +++ b/sysdeps/aarch64/memusage.h @@ -0,0 +1,21 @@ +/* Copyright (C) 2000-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/>. */ + +#define GETSP() ({ register uintptr_t stack_ptr asm ("sp"); stack_ptr; }) + +#include <sysdeps/generic/memusage.h> diff --git a/sysdeps/aarch64/nptl/Makefile b/sysdeps/aarch64/nptl/Makefile new file mode 100644 index 0000000000..f550eb13fb --- /dev/null +++ b/sysdeps/aarch64/nptl/Makefile @@ -0,0 +1,21 @@ +# Copyright (C) 2005-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/>. + +ifeq ($(subdir),csu) +gen-as-const-headers += tcb-offsets.sym +endif diff --git a/sysdeps/aarch64/nptl/pthread_spin_lock.c b/sysdeps/aarch64/nptl/pthread_spin_lock.c new file mode 100644 index 0000000000..490bd43438 --- /dev/null +++ b/sysdeps/aarch64/nptl/pthread_spin_lock.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2008-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/>. */ + +#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000 + +/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because + it will resolve to this very file. Using "sysdeps/.." as reference to the + top level directory does the job. */ +#include <sysdeps/../nptl/pthread_spin_lock.c> diff --git a/sysdeps/aarch64/nptl/pthreaddef.h b/sysdeps/aarch64/nptl/pthreaddef.h new file mode 100644 index 0000000000..361a95c75d --- /dev/null +++ b/sysdeps/aarch64/nptl/pthreaddef.h @@ -0,0 +1,37 @@ +/* Copyright (C) 2002-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/>. */ + +/* Default stack size. */ +#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) + +/* Required stack pointer alignment at beginning. */ +#define STACK_ALIGN 16 + +/* Minimal stack size after allocating thread descriptor and guard size. */ +#define MINIMAL_REST_STACK 2048 + +/* Alignment requirement for TCB. */ +#define TCB_ALIGNMENT 16 + +/* Location of current stack frame. */ +#define CURRENT_STACK_FRAME __builtin_frame_address (0) + + +/* XXX Until we have a better place keep the definitions here. */ +#define __exit_thread_inline(val) \ + INLINE_SYSCALL (exit, 1, (val)) diff --git a/sysdeps/aarch64/nptl/tcb-offsets.sym b/sysdeps/aarch64/nptl/tcb-offsets.sym new file mode 100644 index 0000000000..0677aeabff --- /dev/null +++ b/sysdeps/aarch64/nptl/tcb-offsets.sym @@ -0,0 +1,7 @@ +#include <sysdep.h> +#include <tls.h> + +PTHREAD_MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) +PTHREAD_PID_OFFSET offsetof (struct pthread, pid) +PTHREAD_TID_OFFSET offsetof (struct pthread, tid) +PTHREAD_SIZEOF sizeof (struct pthread) diff --git a/sysdeps/aarch64/nptl/tls.h b/sysdeps/aarch64/nptl/tls.h new file mode 100644 index 0000000000..f03c5195dd --- /dev/null +++ b/sysdeps/aarch64/nptl/tls.h @@ -0,0 +1,142 @@ +/* Copyright (C) 2005-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/>. */ + +#ifndef _TLS_H +#define _TLS_H 1 + +#include <dl-sysdep.h> + +#ifndef __ASSEMBLER__ +# include <stdbool.h> +# include <stddef.h> +# include <stdint.h> + +/* Type for the dtv. */ +typedef union dtv +{ + size_t counter; + struct + { + void *val; + bool is_static; + } pointer; +} dtv_t; + +#else /* __ASSEMBLER__ */ +# include <tcb-offsets.h> +#endif /* __ASSEMBLER__ */ + +#ifndef __ASSEMBLER__ + +/* Get system call information. */ +# include <sysdep.h> + +/* The TP points to the start of the thread blocks. */ +# define TLS_DTV_AT_TP 1 + +/* Get the thread descriptor definition. */ +# include <nptl/descr.h> + +typedef struct +{ + dtv_t *dtv; + void *private; +} tcbhead_t; + +/* This is the size of the initial TCB. */ +# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) + +/* Alignment requirements for the initial TCB. */ +# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) + +/* This is the size of the TCB. */ +# define TLS_TCB_SIZE sizeof (tcbhead_t) + +/* This is the size we need before TCB. */ +# define TLS_PRE_TCB_SIZE sizeof (struct pthread) + +/* Alignment requirements for the TCB. */ +# define TLS_TCB_ALIGN __alignof__ (tcbhead_t) + +/* Install the dtv pointer. The pointer passed is to the element with + index -1 which contain the length. */ +# define INSTALL_DTV(tcbp, dtvp) \ + (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) + +/* Install new dtv for current thread. */ +# define INSTALL_NEW_DTV(dtv) \ + (THREAD_DTV() = (dtv)) + +/* Return dtv of given thread descriptor. */ +# define GET_DTV(tcbp) \ + (((tcbhead_t *) (tcbp))->dtv) + +/* Code to initially initialize the thread pointer. This might need + special attention since 'errno' is not yet available and if the + operation can cause a failure 'errno' must not be touched. */ +# define TLS_INIT_TP(tcbp, secondcall) \ + ({ __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcbp)); NULL; }) + +/* Return the address of the dtv for the current thread. */ +# define THREAD_DTV() \ + (((tcbhead_t *) __builtin_thread_pointer ())->dtv) + +/* Return the thread descriptor for the current thread. */ +# define THREAD_SELF \ + ((struct pthread *)__builtin_thread_pointer () - 1) + +/* Magic for libthread_db to know how to do THREAD_SELF. */ +# define DB_THREAD_SELF \ + CONST_THREAD_AREA (64, sizeof (struct pthread)) + +/* Access to data in the thread descriptor is easy. */ +# define THREAD_GETMEM(descr, member) \ + descr->member +# define THREAD_GETMEM_NC(descr, member, idx) \ + descr->member[idx] +# define THREAD_SETMEM(descr, member, value) \ + descr->member = (value) +# define THREAD_SETMEM_NC(descr, member, idx, value) \ + descr->member[idx] = (value) + +/* Get and set the global scope generation counter in struct pthread. */ +# define THREAD_GSCOPE_FLAG_UNUSED 0 +# define THREAD_GSCOPE_FLAG_USED 1 +# define THREAD_GSCOPE_FLAG_WAIT 2 +# define THREAD_GSCOPE_RESET_FLAG() \ + do \ + { int __res \ + = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ + THREAD_GSCOPE_FLAG_UNUSED); \ + if (__res == THREAD_GSCOPE_FLAG_WAIT) \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ + } \ + while (0) +# define THREAD_GSCOPE_SET_FLAG() \ + do \ + { \ + THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ + atomic_write_barrier (); \ + } \ + while (0) +# define THREAD_GSCOPE_WAIT() \ + GL(dl_wait_lookup_done) () + +# endif /* __ASSEMBLER__ */ + +#endif /* tls.h */ diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure new file mode 100644 index 0000000000..720c1d7dae --- /dev/null +++ b/sysdeps/aarch64/preconfigure @@ -0,0 +1,14 @@ +case "$machine" in +aarch64*) + base_machine=aarch64 + machine=aarch64 + ;; +esac + +case "$machine" in +aarch64*) + # Parameters to allow auto-detection of -z relro. + libc_commonpagesize=0x1000 + libc_relro_required=yes + ;; +esac diff --git a/sysdeps/aarch64/setjmp.S b/sysdeps/aarch64/setjmp.S new file mode 100644 index 0000000000..5822abd872 --- /dev/null +++ b/sysdeps/aarch64/setjmp.S @@ -0,0 +1,69 @@ +/* Copyright (C) 1997-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 <sysdep.h> +#include <jmpbuf-offsets.h> + + /* Keep traditional entry points in with sigsetjmp(). */ +ENTRY (setjmp) + mov x1, #1 + b 1f +END (setjmp) + +ENTRY (_setjmp) + mov x1, #0 + b 1f +END (_setjmp) +libc_hidden_def (_setjmp) + +ENTRY (__sigsetjmp) + +1: + stp x19, x20, [x0, #JB_X19<<3] + stp x21, x22, [x0, #JB_X21<<3] + stp x23, x24, [x0, #JB_X23<<3] + stp x25, x26, [x0, #JB_X25<<3] + stp x27, x28, [x0, #JB_X27<<3] + +#ifdef PTR_MANGLE + PTR_MANGLE (x4, x30, x3, x2) + stp x29, x4, [x0, #JB_X29<<3] +#else + stp x29, x30, [x0, #JB_X29<<3] +#endif + stp d8, d9, [x0, #JB_D8<<3] + stp d10, d11, [x0, #JB_D10<<3] + stp d12, d13, [x0, #JB_D12<<3] + stp d14, d15, [x0, #JB_D14<<3] +#ifdef PTR_MANGLE + mov x4, sp + PTR_MANGLE (x5, x4, x3, x2) + str x5, [x0, #JB_SP<<3] +#else + mov x2, sp + str x2, [x0, #JB_SP<<3] +#endif +#if defined NOT_IN_libc && defined IS_IN_rtld + /* In ld.so we never save the signal mask */ + mov w0, #0 + RET +#else + b C_SYMBOL_NAME(__sigjmp_save) +#endif +END (__sigsetjmp) +hidden_def (__sigsetjmp) diff --git a/sysdeps/aarch64/shlib-versions b/sysdeps/aarch64/shlib-versions new file mode 100644 index 0000000000..67f19119aa --- /dev/null +++ b/sysdeps/aarch64/shlib-versions @@ -0,0 +1,7 @@ +aarch64.*-.*-linux.* DEFAULT GLIBC_2.17 + +%ifdef HAVE_AARCH64_BE +aarch64.*-.*-linux.* ld=ld-linux-aarch64_be.so.1 +%else +aarch64.*-.*-linux.* ld=ld-linux-aarch64.so.1 +%endif diff --git a/sysdeps/aarch64/soft-fp/Makefile b/sysdeps/aarch64/soft-fp/Makefile new file mode 100644 index 0000000000..ada13e8b70 --- /dev/null +++ b/sysdeps/aarch64/soft-fp/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),math) +CPPFLAGS += -I../soft-fp +endif diff --git a/sysdeps/aarch64/soft-fp/e_sqrtl.c b/sysdeps/aarch64/soft-fp/e_sqrtl.c new file mode 100644 index 0000000000..a13c542a05 --- /dev/null +++ b/sysdeps/aarch64/soft-fp/e_sqrtl.c @@ -0,0 +1,39 @@ +/* long double square root in software floating-point emulation. + Copyright (C) 1997-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Richard Henderson (rth@cygnus.com) and + Jakub Jelinek (jj@ultra.linux.cz). + + 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 <stdlib.h> +#include <soft-fp.h> +#include <quad.h> + +long double +__ieee754_sqrtl (const long double a) +{ + FP_DECL_EX; + FP_DECL_Q(A); FP_DECL_Q(C); + long double c; + + FP_INIT_ROUNDMODE; + FP_UNPACK_Q(A, a); + FP_SQRT_Q(C, A); + FP_PACK_Q(c, C); + FP_HANDLE_EXCEPTIONS; + return c; +} +strong_alias (__ieee754_sqrtl, __sqrtl_finite) diff --git a/sysdeps/aarch64/soft-fp/sfp-machine.h b/sysdeps/aarch64/soft-fp/sfp-machine.h new file mode 100644 index 0000000000..9bb94e5ccc --- /dev/null +++ b/sysdeps/aarch64/soft-fp/sfp-machine.h @@ -0,0 +1,118 @@ +#include <fenv.h> +#include <fpu_control.h> + +#define _FP_W_TYPE_SIZE 64 +#define _FP_W_TYPE unsigned long long +#define _FP_WS_TYPE signed long long +#define _FP_I_TYPE long long + +#define _FP_MUL_MEAT_S(R,X,Y) \ + _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y) +#define _FP_MUL_MEAT_D(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_Q(R,X,Y) \ + _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) + +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) + +#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1) +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1 +#define _FP_NANSIGN_S 0 +#define _FP_NANSIGN_D 0 +#define _FP_NANSIGN_Q 0 + +#define _FP_KEEPNANFRACP 1 +#define _FP_QNANNEGATEDP 0 + +/* From my experiments it seems X is chosen unless one of the + NaNs is sNaN, in which case the result is NANSIGN/NANFRAC. */ +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if ((_FP_FRAC_HIGH_RAW_##fs(X) | \ + _FP_FRAC_HIGH_RAW_##fs(Y)) & _FP_QNANBIT_##fs) \ + { \ + R##_s = _FP_NANSIGN_##fs; \ + _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ + } \ + else \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +#define _FP_DECL_EX fpu_control_t _fcw + +#define FP_ROUNDMODE (_fcw & _FPU_FPCR_RM_MASK) + +#define FP_RND_NEAREST FE_TONEAREST +#define FP_RND_ZERO FE_TOWARDZERO +#define FP_RND_PINF FE_UPWARD +#define FP_RND_MINF FE_DOWNWARD + +#define FP_EX_INVALID FE_INVALID +#define FP_EX_OVERFLOW FE_OVERFLOW +#define FP_EX_UNDERFLOW FE_UNDERFLOW +#define FP_EX_DIVZERO FE_DIVBYZERO +#define FP_EX_INEXACT FE_INEXACT + +#define FP_INIT_ROUNDMODE \ +do { \ + _FPU_GETCW (_fcw); \ +} while (0) + +#define FP_HANDLE_EXCEPTIONS \ + do { \ + const float fp_max = __FLT_MAX__; \ + const float fp_min = __FLT_MIN__; \ + const float fp_1e32 = 1.0e32f; \ + const float fp_zero = 0.0; \ + const float fp_one = 1.0; \ + unsigned fpsr; \ + if (_fex & FP_EX_INVALID) \ + { \ + __asm__ __volatile__ ("fdiv\ts0, %s0, %s0" \ + : \ + : "w" (fp_zero) \ + : "s0"); \ + __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ + } \ + if (_fex & FP_EX_DIVZERO) \ + { \ + __asm__ __volatile__ ("fdiv\ts0, %s0, %s1" \ + : \ + : "w" (fp_one), "w" (fp_zero) \ + : "s0"); \ + __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ + } \ + if (_fex & FP_EX_OVERFLOW) \ + { \ + __asm__ __volatile__ ("fadd\ts0, %s0, %s1" \ + : \ + : "w" (fp_max), "w" (fp_1e32) \ + : "s0"); \ + __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ + } \ + if (_fex & FP_EX_UNDERFLOW) \ + { \ + __asm__ __volatile__ ("fmul\ts0, %s0, %s0" \ + : \ + : "w" (fp_min) \ + : "s0"); \ + __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ + } \ + if (_fex & FP_EX_INEXACT) \ + { \ + __asm__ __volatile__ ("fsub\ts0, %s0, %s1" \ + : \ + : "w" (fp_max), "w" (fp_one) \ + : "s0"); \ + __asm__ __volatile__ ("mrs\t%0, fpsr" : "=r" (fpsr)); \ + } \ + } while (0) + +#define FP_TRAPPING_EXCEPTIONS ((_fcw >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT) diff --git a/sysdeps/aarch64/sotruss-lib.c b/sysdeps/aarch64/sotruss-lib.c new file mode 100644 index 0000000000..735e9efef9 --- /dev/null +++ b/sysdeps/aarch64/sotruss-lib.c @@ -0,0 +1,51 @@ +/* Override generic sotruss-lib.c to define actual functions for AArch64. + Copyright (C) 2012-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/>. */ + +#define HAVE_ARCH_PLTENTER +#define HAVE_ARCH_PLTEXIT + +#include <elf/sotruss-lib.c> + +ElfW(Addr) +la_aarch64_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), + unsigned int ndx __attribute__ ((unused)), + uintptr_t *refcook, uintptr_t *defcook, + La_aarch64_regs *regs, unsigned int *flags, + const char *symname, long int *framesizep) +{ + print_enter (refcook, defcook, symname, + regs->lr_xreg[0], regs->lr_xreg[1], regs->lr_xreg[2], + *flags); + + /* No need to copy anything, we will not need the parameters in any case. */ + *framesizep = 0; + + return sym->st_value; +} + +unsigned int +la_aarch64_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, + uintptr_t *defcook, + const struct La_aarch64_regs *inregs, + struct La_aarch64_retval *outregs, const char *symname) +{ + print_exit (refcook, defcook, symname, outregs->lrv_xreg[0]); + + return 0; +} diff --git a/sysdeps/aarch64/stackinfo.h b/sysdeps/aarch64/stackinfo.h new file mode 100644 index 0000000000..cf381f66ac --- /dev/null +++ b/sysdeps/aarch64/stackinfo.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2001-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/>. */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +#include <elf.h> + +/* On AArch64 the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +/* Default to a non-executable stack. */ +#define DEFAULT_STACK_PERMS (PF_R|PF_W) + +#endif /* stackinfo.h */ diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S new file mode 100644 index 0000000000..35d603ae9e --- /dev/null +++ b/sysdeps/aarch64/start.S @@ -0,0 +1,93 @@ +/* Copyright (C) 1995-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/>. */ + +/* This is the canonical entry point, usually the first thing in the text + segment. + + Note that the code in the .init section has already been run. + This includes _init and _libc_init + + + At this entry point, most registers' values are unspecified, except: + + x0 Contains a function pointer to be registered with `atexit'. + This is how the dynamic linker arranges to have DT_FINI + functions called for shared libraries that have been loaded + before this code runs. + + sp The stack contains the arguments and environment: + 0(sp) argc + 8(sp) argv[0] + ... + (8*argc)(sp) NULL + (8*(argc+1))(sp) envp[0] + ... + NULL + */ + + .text + .globl _start + .type _start,#function +_start: + /* Create an initial frame with 0 LR and FP */ + mov x29, #0 + mov x30, #0 + mov x29, sp + + /* Setup rtld_fini in argument register */ + mov x5, x0 + + /* Load argc and a pointer to argv */ + ldr x1, [sp, #0] + add x2, sp, #8 + + /* Setup stack limit in argument register */ + mov x6, sp + +#ifdef SHARED + adrp x0, :got:main + ldr x0, [x0, #:got_lo12:main] + + adrp x3, :got:__libc_csu_init + ldr x3, [x3, #:got_lo12:__libc_csu_init] + + adrp x4, :got:__libc_csu_fini + ldr x4, [x4, #:got_lo12:__libc_csu_fini] +#else + /* Set up the other arguments in registers */ + ldr x0, =main + ldr x3, =__libc_csu_init + ldr x4, =__libc_csu_fini +#endif + + /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, + stack_end) */ + + /* Let the libc call main and exit with its return code. */ + bl __libc_start_main + + /* should never get here....*/ + bl abort + + /* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start diff --git a/sysdeps/aarch64/strcmp.S b/sysdeps/aarch64/strcmp.S new file mode 100644 index 0000000000..ec9d10a29b --- /dev/null +++ b/sysdeps/aarch64/strcmp.S @@ -0,0 +1,155 @@ +/* Copyright (C) 2012-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/>. */ + +/* Assumptions: + * + * ARMv8-a, AArch64 + */ + +#include <sysdep.h> + +#define REP8_01 0x0101010101010101 +#define REP8_7f 0x7f7f7f7f7f7f7f7f +#define REP8_80 0x8080808080808080 + +/* Parameters and result. */ +#define src1 x0 +#define src2 x1 +#define result x0 + +/* Internal variables. */ +#define data1 x2 +#define data1w w2 +#define data2 x3 +#define data2w w3 +#define has_nul x4 +#define diff x5 +#define syndrome x6 +#define tmp1 x7 +#define tmp2 x8 +#define tmp3 x9 +#define zeroones x10 +#define pos x11 + + /* Start of performance-critical section -- one 64B cache line. */ +ENTRY_ALIGN(strcmp, 6) + + eor tmp1, src1, src2 + mov zeroones, #REP8_01 + tst tmp1, #7 + b.ne L(misaligned8) + ands tmp1, src1, #7 + b.ne L(mutual_align) + /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 + (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and + can be done in parallel across the entire word. */ +L(loop_aligned): + ldr data1, [src1], #8 + ldr data2, [src2], #8 +L(start_realigned): + sub tmp1, data1, zeroones + orr tmp2, data1, #REP8_7f + eor diff, data1, data2 /* Non-zero if differences found. */ + bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ + orr syndrome, diff, has_nul + cbz syndrome, L(loop_aligned) + /* End of performance-critical section -- one 64B cache line. */ + +#ifndef __AARCH64EB__ + rev syndrome, syndrome + rev data1, data1 + /* The MS-non-zero bit of the syndrome marks either the first bit + that is different, or the top bit of the first zero byte. + Shifting left now will bring the critical information into the + top bits. */ + clz pos, syndrome + rev data2, data2 + lsl data1, data1, pos + lsl data2, data2, pos + /* But we need to zero-extend (char is unsigned) the value and then + perform a signed 32-bit subtraction. */ + lsr data1, data1, #56 + sub result, data1, data2, lsr #56 + RET +#else + /* For big-endian we cannot use the trick with the syndrome value + as carry-propagation can corrupt the upper bits if the trailing + bytes in the string contain 0x01. */ + /* However, if there is no NUL byte in the dword, we can generate + the result directly. We can't just subtract the bytes as the + MSB might be significant. */ + cbnz has_nul, 1f + cmp data1, data2 + cset result, ne + cneg result, result, lo + RET +1: + /* Re-compute the NUL-byte detection, using a byte-reversed value. */ + rev tmp3, data1 + sub tmp1, tmp3, zeroones + orr tmp2, tmp3, #REP8_7f + bic has_nul, tmp1, tmp2 + rev has_nul, has_nul + orr syndrome, diff, has_nul + clz pos, syndrome + /* The MS-non-zero bit of the syndrome marks either the first bit + that is different, or the top bit of the first zero byte. + Shifting left now will bring the critical information into the + top bits. */ + lsl data1, data1, pos + lsl data2, data2, pos + /* But we need to zero-extend (char is unsigned) the value and then + perform a signed 32-bit subtraction. */ + lsr data1, data1, #56 + sub result, data1, data2, lsr #56 + RET +#endif + +L(mutual_align): + /* Sources are mutually aligned, but are not currently at an + alignment boundary. Round down the addresses and then mask off + the bytes that preceed the start point. */ + bic src1, src1, #7 + bic src2, src2, #7 + lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ + ldr data1, [src1], #8 + neg tmp1, tmp1 /* Bits to alignment -64. */ + ldr data2, [src2], #8 + mov tmp2, #~0 +#ifdef __AARCH64EB__ + /* Big-endian. Early bytes are at MSB. */ + lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#else + /* Little-endian. Early bytes are at LSB. */ + lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#endif + orr data1, data1, tmp2 + orr data2, data2, tmp2 + b L(start_realigned) + +L(misaligned8): + /* We can do better than this. */ + ldrb data1w, [src1], #1 + ldrb data2w, [src2], #1 + cmp data1w, #1 + ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ + b.eq L(misaligned8) + sub result, data1, data2 + RET +END(strcmp) +libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/aarch64/strlen.S b/sysdeps/aarch64/strlen.S new file mode 100644 index 0000000000..4d2a20a18e --- /dev/null +++ b/sysdeps/aarch64/strlen.S @@ -0,0 +1,117 @@ +/* Copyright (C) 2012-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 <sysdep.h> + +/* Assumptions: + * + * ARMv8-a, AArch64 + */ + +/* Arguments and results. */ +#define srcin x0 +#define len x0 + +/* Locals and temporaries. */ +#define src x1 +#define data1 x2 +#define data2 x3 +#define data2a x4 +#define has_nul1 x5 +#define has_nul2 x6 +#define tmp1 x7 +#define tmp2 x8 +#define tmp3 x9 +#define tmp4 x10 +#define zeroones x11 +#define pos x12 + +#define REP8_01 0x0101010101010101 +#define REP8_7f 0x7f7f7f7f7f7f7f7f +#define REP8_80 0x8080808080808080 + + /* Start of critial section -- keep to one 64Byte cache line. */ +ENTRY_ALIGN (strlen, 6) + mov zeroones, #REP8_01 + bic src, srcin, #15 + ands tmp1, srcin, #15 + b.ne L(misaligned) + /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 + (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and + can be done in parallel across the entire word. */ + /* The inner loop deals with two Dwords at a time. This has a + slightly higher start-up cost, but we should win quite quickly, + especially on cores with a high number of issue slots per + cycle, as we get much better parallelism out of the operations. */ +L(loop): + ldp data1, data2, [src], #16 +L(realigned): + sub tmp1, data1, zeroones + orr tmp2, data1, #REP8_7f + sub tmp3, data2, zeroones + orr tmp4, data2, #REP8_7f + bic has_nul1, tmp1, tmp2 + bics has_nul2, tmp3, tmp4 + ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */ + b.eq L(loop) + /* End of critical section -- keep to one 64Byte cache line. */ + + sub len, src, srcin + cbz has_nul1, L(nul_in_data2) +#ifdef __AARCH64EB__ + mov data2, data1 +#endif + sub len, len, #8 + mov has_nul2, has_nul1 +L(nul_in_data2): +#ifdef __AARCH64EB__ + /* For big-endian, carry propagation (if the final byte in the + string is 0x01) means we cannot use has_nul directly. The + easiest way to get the correct byte is to byte-swap the data + and calculate the syndrome a second time. */ + rev data2, data2 + sub tmp1, data2, zeroones + orr tmp2, data2, #REP8_7f + bic has_nul2, tmp1, tmp2 +#endif + sub len, len, #8 + rev has_nul2, has_nul2 + clz pos, has_nul2 + add len, len, pos, lsr #3 /* Bits to bytes. */ + RET + +L(misaligned): + cmp tmp1, #8 + neg tmp1, tmp1 + ldp data1, data2, [src], #16 + lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ + mov tmp2, #~0 +#ifdef __AARCH64EB__ + /* Big-endian. Early bytes are at MSB. */ + lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#else + /* Little-endian. Early bytes are at LSB. */ + lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ +#endif + orr data1, data1, tmp2 + orr data2a, data2, tmp2 + csinv data1, data1, xzr, le + csel data2, data2, data2a, le + b L(realigned) +END (strlen) +libc_hidden_builtin_def (strlen) diff --git a/sysdeps/aarch64/strncmp.S b/sysdeps/aarch64/strncmp.S new file mode 100644 index 0000000000..468bff4a3e --- /dev/null +++ b/sysdeps/aarch64/strncmp.S @@ -0,0 +1,204 @@ +/* Copyright (C) 2013-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 <sysdep.h> + +/* Assumptions: + * + * ARMv8-a, AArch64 + */ + +#define REP8_01 0x0101010101010101 +#define REP8_7f 0x7f7f7f7f7f7f7f7f +#define REP8_80 0x8080808080808080 + +/* Parameters and result. */ +#define src1 x0 +#define src2 x1 +#define limit x2 +#define result x0 + +/* Internal variables. */ +#define data1 x3 +#define data1w w3 +#define data2 x4 +#define data2w w4 +#define has_nul x5 +#define diff x6 +#define syndrome x7 +#define tmp1 x8 +#define tmp2 x9 +#define tmp3 x10 +#define zeroones x11 +#define pos x12 +#define limit_wd x13 +#define mask x14 +#define endloop x15 + +ENTRY_ALIGN_AND_PAD (strncmp, 6, 7) + cbz limit, L(ret0) + eor tmp1, src1, src2 + mov zeroones, #REP8_01 + tst tmp1, #7 + b.ne L(misaligned8) + ands tmp1, src1, #7 + b.ne L(mutual_align) + /* Calculate the number of full and partial words -1. */ + sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ + lsr limit_wd, limit_wd, #3 /* Convert to Dwords. */ + + /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 + (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and + can be done in parallel across the entire word. */ + /* Start of performance-critical section -- one 64B cache line. */ +L(loop_aligned): + ldr data1, [src1], #8 + ldr data2, [src2], #8 +L(start_realigned): + subs limit_wd, limit_wd, #1 + sub tmp1, data1, zeroones + orr tmp2, data1, #REP8_7f + eor diff, data1, data2 /* Non-zero if differences found. */ + csinv endloop, diff, xzr, pl /* Last Dword or differences. */ + bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ + ccmp endloop, #0, #0, eq + b.eq L(loop_aligned) + /* End of performance-critical section -- one 64B cache line. */ + + /* Not reached the limit, must have found the end or a diff. */ + tbz limit_wd, #63, L(not_limit) + + /* Limit % 8 == 0 => all bytes significant. */ + ands limit, limit, #7 + b.eq L(not_limit) + + lsl limit, limit, #3 /* Bits -> bytes. */ + mov mask, #~0 +#ifdef __AARCH64EB__ + lsr mask, mask, limit +#else + lsl mask, mask, limit +#endif + bic data1, data1, mask + bic data2, data2, mask + + /* Make sure that the NUL byte is marked in the syndrome. */ + orr has_nul, has_nul, mask + +L(not_limit): + orr syndrome, diff, has_nul + +#ifndef __AARCH64EB__ + rev syndrome, syndrome + rev data1, data1 + /* The MS-non-zero bit of the syndrome marks either the first bit + that is different, or the top bit of the first zero byte. + Shifting left now will bring the critical information into the + top bits. */ + clz pos, syndrome + rev data2, data2 + lsl data1, data1, pos + lsl data2, data2, pos + /* But we need to zero-extend (char is unsigned) the value and then + perform a signed 32-bit subtraction. */ + lsr data1, data1, #56 + sub result, data1, data2, lsr #56 + RET +#else + /* For big-endian we cannot use the trick with the syndrome value + as carry-propagation can corrupt the upper bits if the trailing + bytes in the string contain 0x01. */ + /* However, if there is no NUL byte in the dword, we can generate + the result directly. We can't just subtract the bytes as the + MSB might be significant. */ + cbnz has_nul, 1f + cmp data1, data2 + cset result, ne + cneg result, result, lo + RET +1: + /* Re-compute the NUL-byte detection, using a byte-reversed value. */ + rev tmp3, data1 + sub tmp1, tmp3, zeroones + orr tmp2, tmp3, #REP8_7f + bic has_nul, tmp1, tmp2 + rev has_nul, has_nul + orr syndrome, diff, has_nul + clz pos, syndrome + /* The MS-non-zero bit of the syndrome marks either the first bit + that is different, or the top bit of the first zero byte. + Shifting left now will bring the critical information into the + top bits. */ + lsl data1, data1, pos + lsl data2, data2, pos + /* But we need to zero-extend (char is unsigned) the value and then + perform a signed 32-bit subtraction. */ + lsr data1, data1, #56 + sub result, data1, data2, lsr #56 + RET +#endif + +L(mutual_align): + /* Sources are mutually aligned, but are not currently at an + alignment boundary. Round down the addresses and then mask off + the bytes that precede the start point. + We also need to adjust the limit calculations, but without + overflowing if the limit is near ULONG_MAX. */ + bic src1, src1, #7 + bic src2, src2, #7 + ldr data1, [src1], #8 + neg tmp3, tmp1, lsl #3 /* 64 - bits(bytes beyond align). */ + ldr data2, [src2], #8 + mov tmp2, #~0 + sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ +#ifdef __AARCH64EB__ + /* Big-endian. Early bytes are at MSB. */ + lsl tmp2, tmp2, tmp3 /* Shift (tmp1 & 63). */ +#else + /* Little-endian. Early bytes are at LSB. */ + lsr tmp2, tmp2, tmp3 /* Shift (tmp1 & 63). */ +#endif + and tmp3, limit_wd, #7 + lsr limit_wd, limit_wd, #3 + /* Adjust the limit. Only low 3 bits used, so overflow irrelevant. */ + add limit, limit, tmp1 + add tmp3, tmp3, tmp1 + orr data1, data1, tmp2 + orr data2, data2, tmp2 + add limit_wd, limit_wd, tmp3, lsr #3 + b L(start_realigned) + +L(ret0): + mov result, #0 + RET + + .p2align 6 +L(misaligned8): + sub limit, limit, #1 +1: + /* Perhaps we can do better than this. */ + ldrb data1w, [src1], #1 + ldrb data2w, [src2], #1 + subs limit, limit, #1 + ccmp data1w, #1, #0, cs /* NZCV = 0b0000. */ + ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ + b.eq 1b + sub result, data1, data2 + RET +END (strncmp) +libc_hidden_builtin_def (strncmp) diff --git a/sysdeps/aarch64/strnlen.S b/sysdeps/aarch64/strnlen.S new file mode 100644 index 0000000000..928360f3a1 --- /dev/null +++ b/sysdeps/aarch64/strnlen.S @@ -0,0 +1,161 @@ +/* strnlen - calculate the length of a string with limit. + + Copyright (C) 2013-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 <sysdep.h> + +/* Assumptions: + * + * ARMv8-a, AArch64 + */ + +/* Arguments and results. */ +#define srcin x0 +#define len x0 +#define limit x1 + +/* Locals and temporaries. */ +#define src x2 +#define data1 x3 +#define data2 x4 +#define data2a x5 +#define has_nul1 x6 +#define has_nul2 x7 +#define tmp1 x8 +#define tmp2 x9 +#define tmp3 x10 +#define tmp4 x11 +#define zeroones x12 +#define pos x13 +#define limit_wd x14 + +#define REP8_01 0x0101010101010101 +#define REP8_7f 0x7f7f7f7f7f7f7f7f +#define REP8_80 0x8080808080808080 + +ENTRY_ALIGN_AND_PAD (__strnlen, 6, 9) + cbz limit, L(hit_limit) + mov zeroones, #REP8_01 + bic src, srcin, #15 + ands tmp1, srcin, #15 + b.ne L(misaligned) + /* Calculate the number of full and partial words -1. */ + sub limit_wd, limit, #1 /* Limit != 0, so no underflow. */ + lsr limit_wd, limit_wd, #4 /* Convert to Qwords. */ + + /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 + (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and + can be done in parallel across the entire word. */ + /* The inner loop deals with two Dwords at a time. This has a + slightly higher start-up cost, but we should win quite quickly, + especially on cores with a high number of issue slots per + cycle, as we get much better parallelism out of the operations. */ + + /* Start of critial section -- keep to one 64Byte cache line. */ +L(loop): + ldp data1, data2, [src], #16 +L(realigned): + sub tmp1, data1, zeroones + orr tmp2, data1, #REP8_7f + sub tmp3, data2, zeroones + orr tmp4, data2, #REP8_7f + bic has_nul1, tmp1, tmp2 + bic has_nul2, tmp3, tmp4 + subs limit_wd, limit_wd, #1 + orr tmp1, has_nul1, has_nul2 + ccmp tmp1, #0, #0, pl /* NZCV = 0000 */ + b.eq L(loop) + /* End of critical section -- keep to one 64Byte cache line. */ + + orr tmp1, has_nul1, has_nul2 + cbz tmp1, L(hit_limit) /* No null in final Qword. */ + + /* We know there's a null in the final Qword. The easiest thing + to do now is work out the length of the string and return + MIN (len, limit). */ + + sub len, src, srcin + cbz has_nul1, L(nul_in_data2) +#ifdef __AARCH64EB__ + mov data2, data1 +#endif + sub len, len, #8 + mov has_nul2, has_nul1 +L(nul_in_data2): +#ifdef __AARCH64EB__ + /* For big-endian, carry propagation (if the final byte in the + string is 0x01) means we cannot use has_nul directly. The + easiest way to get the correct byte is to byte-swap the data + and calculate the syndrome a second time. */ + rev data2, data2 + sub tmp1, data2, zeroones + orr tmp2, data2, #REP8_7f + bic has_nul2, tmp1, tmp2 +#endif + sub len, len, #8 + rev has_nul2, has_nul2 + clz pos, has_nul2 + add len, len, pos, lsr #3 /* Bits to bytes. */ + cmp len, limit + csel len, len, limit, ls /* Return the lower value. */ + RET + +L(misaligned): + /* Deal with a partial first word. + We're doing two things in parallel here; + 1) Calculate the number of words (but avoiding overflow if + limit is near ULONG_MAX) - to do this we need to work out + limit + tmp1 - 1 as a 65-bit value before shifting it; + 2) Load and mask the initial data words - we force the bytes + before the ones we are interested in to 0xff - this ensures + early bytes will not hit any zero detection. */ + sub limit_wd, limit, #1 + neg tmp4, tmp1 + cmp tmp1, #8 + + and tmp3, limit_wd, #15 + lsr limit_wd, limit_wd, #4 + mov tmp2, #~0 + + ldp data1, data2, [src], #16 + lsl tmp4, tmp4, #3 /* Bytes beyond alignment -> bits. */ + add tmp3, tmp3, tmp1 + +#ifdef __AARCH64EB__ + /* Big-endian. Early bytes are at MSB. */ + lsl tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ +#else + /* Little-endian. Early bytes are at LSB. */ + lsr tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ +#endif + add limit_wd, limit_wd, tmp3, lsr #4 + + orr data1, data1, tmp2 + orr data2a, data2, tmp2 + + csinv data1, data1, xzr, le + csel data2, data2, data2a, le + b L(realigned) + +L(hit_limit): + mov len, limit + RET +END (__strnlen) +weak_alias (__strnlen, strnlen) +libc_hidden_def (strnlen) diff --git a/sysdeps/aarch64/sysdep.h b/sysdeps/aarch64/sysdep.h new file mode 100644 index 0000000000..7169ba716c --- /dev/null +++ b/sysdeps/aarch64/sysdep.h @@ -0,0 +1,98 @@ +/* Copyright (C) 1997-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 <sysdeps/generic/sysdep.h> + +#ifdef __ASSEMBLER__ + +/* Syntactic details of assembler. */ + +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name + +/* Define an entry point visible from C. */ +#define ENTRY(name) \ + .globl C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name),%function; \ + .align 4; \ + C_LABEL(name) \ + cfi_startproc; \ + CALL_MCOUNT + +/* Define an entry point visible from C. */ +#define ENTRY_ALIGN(name, align) \ + .globl C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name),%function; \ + .p2align align; \ + C_LABEL(name) \ + cfi_startproc; \ + CALL_MCOUNT + +/* Define an entry point visible from C with a specified alignment and + pre-padding with NOPs. This can be used to ensure that a critical + loop within a function is cache line aligned. Note this version + does not adjust the padding if CALL_MCOUNT is defined. */ + +#define ENTRY_ALIGN_AND_PAD(name, align, padding) \ + .globl C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name),%function; \ + .p2align align; \ + .rep padding; \ + nop; \ + .endr; \ + C_LABEL(name) \ + cfi_startproc; \ + CALL_MCOUNT + +#undef END +#define END(name) \ + cfi_endproc; \ + ASM_SIZE_DIRECTIVE(name) + +/* If compiled for profiling, call `mcount' at the start of each function. */ +#ifdef PROF +# define CALL_MCOUNT \ + str x30, [sp, #-16]!; \ + bl mcount; \ + ldr x30, [sp], #16 ; +#else +# define CALL_MCOUNT /* Do nothing. */ +#endif + +/* Local label name for asm code. */ +#ifndef L +# define L(name) .L##name +#endif + +/* Load or store to/from a pc-relative EXPR into/from R, using T. */ +#define LDST_PCREL(OP, R, T, EXPR) \ + adrp T, EXPR; \ + OP R, [T, #:lo12:EXPR];\ + +/* Load or store to/from a got-relative EXPR into/from R, using T. */ +#define LDST_GLOBAL(OP, R, T, EXPR) \ + adrp T, :got:EXPR; \ + ldr T, [T, #:got_lo12:EXPR];\ + OP R, [T]; + +/* Since C identifiers are not normally prefixed with an underscore + on this system, the asm identifier `syscall_error' intrudes on the + C name space. Make sure we use an innocuous name. */ +#define syscall_error __syscall_error +#define mcount _mcount + +#endif /* __ASSEMBLER__ */ diff --git a/sysdeps/aarch64/tls-macros.h b/sysdeps/aarch64/tls-macros.h new file mode 100644 index 0000000000..ad39e243db --- /dev/null +++ b/sysdeps/aarch64/tls-macros.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2009-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/>. */ + +#define TLS_LD(x) TLS_GD(x) + +#define TLS_GD(x) \ + ({ register unsigned long __result asm ("x0"); \ + asm ("adrp %0, :tlsgd:" #x "; " \ + "add %0, %0, #:tlsgd_lo12:" #x "; " \ + "bl __tls_get_addr;" \ + "nop" \ + : "=r" (__result) \ + : \ + : "x1", "x2", "x3", "x4", "x5", "x6", \ + "x7", "x8", "x9", "x10", "x11", "x12", \ + "x13", "x14", "x15", "x16", "x17", "x18", \ + "x30", "memory"); \ + (int *) (__result); }) + +#define TLS_IE(x) \ + ({ register unsigned long __result asm ("x0"); \ + register unsigned long __t; \ + asm ("mrs %1, tpidr_el0; " \ + "adrp %0, :gottprel:" #x "; " \ + "ldr %0, [%0, #:gottprel_lo12:" #x "]; " \ + "add %0, %0, %1" \ + : "=r" (__result), "=r" (__t)); \ + (int *) (__result); }) + +#define TLS_LE(x) \ + ({ register unsigned long __result asm ("x0"); \ + asm ("mrs %0, tpidr_el0; " \ + "add %0, %0, :tprel_hi12:" #x "; " \ + "add %0, %0, :tprel_lo12_nc:" #x \ + : "=r" (__result)); \ + (int *) (__result); }) diff --git a/sysdeps/aarch64/tlsdesc.c b/sysdeps/aarch64/tlsdesc.c new file mode 100644 index 0000000000..0921230676 --- /dev/null +++ b/sysdeps/aarch64/tlsdesc.c @@ -0,0 +1,154 @@ +/* Manage TLS descriptors. AArch64 version. + + 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 <link.h> +#include <ldsodefs.h> +#include <elf/dynamic-link.h> +#include <tls.h> +#include <dl-tlsdesc.h> +#include <tlsdeschtab.h> + +/* The following functions take an entry_check_offset argument. It's + computed by the caller as an offset between its entry point and the + call site, such that by adding the built-in return address that is + implicitly passed to the function with this offset, we can easily + obtain the caller's entry point to compare with the entry point + given in the TLS descriptor. If it's changed, we want to return + immediately. */ + +/* This function is used to lazily resolve TLS_DESC RELA relocations. + The argument location is used to hold a pointer to the relocation. */ + +void +attribute_hidden +_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, + struct link_map *l) +{ + const ElfW(Rela) *reloc = td->arg; + + if (_dl_tlsdesc_resolve_early_return_p + (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) + return; + + /* The code below was borrowed from _dl_fixup(), + except for checking for STB_LOCAL. */ + const ElfW(Sym) *const symtab + = (const void *) D_PTR (l, l_info[DT_SYMTAB]); + const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); + const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; + lookup_t result; + + /* Look up the target symbol. If the normal lookup rules are not + used don't look in the global scope. */ + if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL + && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) + { + const struct r_found_version *version = NULL; + + if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) + { + const ElfW(Half) *vernum = + (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); + ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; + version = &l->l_versions[ndx]; + if (version->hash == 0) + version = NULL; + } + + result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, + l->l_scope, version, ELF_RTYPE_CLASS_PLT, + DL_LOOKUP_ADD_DEPENDENCY, NULL); + } + else + { + /* We already found the symbol. The module (and therefore its load + address) is also known. */ + result = l; + } + + if (!sym) + { + td->arg = (void*) reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else + { +# ifndef SHARED + CHECK_STATIC_TLS (l, result); +# else + if (!TRY_STATIC_TLS (l, result)) + { + td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value + + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif + { + td->arg = (void*) (sym->st_value + result->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + + _dl_tlsdesc_wake_up_held_fixups (); +} + +/* This function is used to avoid busy waiting for other threads to + complete the lazy relocation. Once another thread wins the race to + relocate a TLS descriptor, it sets the descriptor up such that this + function is called to wait until the resolver releases the + lock. */ + +void +attribute_hidden +_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, + void *caller) +{ + /* Maybe we're lucky and can return early. */ + if (caller != td->entry) + return; + + /* Locking here will stop execution until the running resolver runs + _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. + + FIXME: We'd be better off waiting on a condition variable, such + that we didn't have to hold the lock throughout the relocation + processing. */ + __rtld_lock_lock_recursive (GL(dl_load_lock)); + __rtld_lock_unlock_recursive (GL(dl_load_lock)); +} + + +/* Unmap the dynamic object, but also release its TLS descriptor table + if there is one. */ + +void +internal_function +_dl_unmap (struct link_map *map) +{ + __munmap ((void *) (map)->l_map_start, + (map)->l_map_end - (map)->l_map_start); + +#if SHARED + if (map->l_mach.tlsdesc_table) + htab_delete (map->l_mach.tlsdesc_table); +#endif +} diff --git a/sysdeps/aarch64/tlsdesc.sym b/sysdeps/aarch64/tlsdesc.sym new file mode 100644 index 0000000000..63766af612 --- /dev/null +++ b/sysdeps/aarch64/tlsdesc.sym @@ -0,0 +1,15 @@ +#include <stddef.h> +#include <sysdep.h> +#include <tls.h> +#include <link.h> +#include <dl-tlsdesc.h> + +-- + +-- Abuse tls.h macros to derive offsets relative to the thread register. + +TLSDESC_ARG offsetof(struct tlsdesc, arg) + +TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) +TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) +TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/sysdeps/aarch64/tst-audit.h b/sysdeps/aarch64/tst-audit.h new file mode 100644 index 0000000000..ee0787611c --- /dev/null +++ b/sysdeps/aarch64/tst-audit.h @@ -0,0 +1,25 @@ +/* Definitions for testing PLT entry/exit auditing. AArch64 version. + + Copyright (C) 2005-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/>. */ + +#define pltenter la_aarch64_gnu_pltenter +#define pltexit la_aarch64_gnu_pltexit +#define La_regs La_aarch64_regs +#define La_retval La_aarch64_retval +#define int_retval lrv_xreg[0] diff --git a/sysdeps/unix/sysv/linux/aarch64/Implies b/sysdeps/unix/sysv/linux/aarch64/Implies new file mode 100644 index 0000000000..37b6bda7f9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/Implies @@ -0,0 +1,2 @@ +unix/sysv/linux/generic +unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile new file mode 100644 index 0000000000..88250dd87d --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile @@ -0,0 +1,39 @@ +ifeq ($(subdir),csu) +sysdep_routines += __read_tp libc-__read_tp +static-only-routines += __read_tp +shared-only-routines += libc-__read_tp +endif + +ifeq ($(subdir),elf) +sysdep_routines += dl-vdso +sysdep-rtld-routines += __read_tp +ifeq ($(build-shared),yes) +# This is needed for DSO loading from static binaries. +sysdep-dl-routines += dl-static +sysdep_routines += dl-static +sysdep-rtld-routines += dl-static +endif +endif + +ifeq ($(subdir),misc) +sysdep_headers += sys/elf.h +endif + +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + +abi-variants := lp64 +abi-variants += lp64_be + +ifeq (,$(filter $(default-abi),$(abi-variants))) +Unknown ABI, must be one of $(abi-variants) +endif + +abi-lp64-options := -U__AARCH64EB__ +abi-lp64-condition := !defined __AARCH64EB__ +abi-lp64-ld-soname := ld-linux-aarch64.so.1 + +abi-lp64_be-options := -D__AARCH64EB__ +abi-lp64_be-condition := defined __AARCH64EB__ +abi-lp64_be-ld-soname := ld-linux-aarch64_be.so.1 diff --git a/sysdeps/unix/sysv/linux/aarch64/Versions b/sysdeps/unix/sysv/linux/aarch64/Versions new file mode 100644 index 0000000000..9bd87fe2d0 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/Versions @@ -0,0 +1,12 @@ +ld { + GLIBC_PRIVATE { + # used for loading by static libraries + _dl_var_init; + } +} +libc { + GLIBC_PRIVATE { + __vdso_clock_gettime; + __vdso_clock_getres; + } +} diff --git a/sysdeps/unix/sysv/linux/aarch64/__read_tp.S b/sysdeps/unix/sysv/linux/aarch64/__read_tp.S new file mode 100644 index 0000000000..88d6d7e116 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/__read_tp.S @@ -0,0 +1,25 @@ +/* Copyright (C) 2005-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 <sysdep.h> + + .hidden __read_tp +ENTRY (__read_tp) + mrs x0, tpidr_el0 + RET +END (__read_tp) diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h b/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h new file mode 100644 index 0000000000..78e13158bb --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/fcntl.h @@ -0,0 +1,55 @@ +/* O_*, F_*, FD_* bit values for the AArch64 Linux ABI. + 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/>. */ + +#ifndef _FCNTL_H +# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." +#endif + +#define __O_DIRECTORY 040000 +#define __O_NOFOLLOW 0100000 +#define __O_DIRECT 0200000 + +#define __O_LARGEFILE 0 + +# define F_GETLK64 5 +# define F_SETLK64 6 +# define F_SETLKW64 7 + +struct flock + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; + +#ifdef __USE_LARGEFILE64 +struct flock64 + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; +#endif + +/* Include generic Linux declarations. */ +#include <bits/fcntl-linux.h> diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h new file mode 100644 index 0000000000..31732d4088 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/libc-vdso.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2009-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/>. */ + +#ifndef _LIBC_VDSO_H +#define _LIBC_VDSO_H + +#ifdef SHARED + +extern void (*__vdso_gettimeofday) (struct timeval *, void *) + attribute_hidden; +extern void (*__vdso_clock_gettime) (clockid_t, struct timespec *); +extern void (*__vdso_clock_getres) (clockid_t, struct timespec *); + +#endif + +#endif /* _LIBC_VDSO_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/mman.h b/sysdeps/unix/sysv/linux/aarch64/bits/mman.h new file mode 100644 index 0000000000..d730247108 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/mman.h @@ -0,0 +1,44 @@ +/* Definitions for POSIX memory map interface. Linux/AArch64 version. + + Copyright (C) 1997-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/>. */ + +#ifndef _SYS_MMAN_H +# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead." +#endif + +/* The following definitions basically come from the kernel headers. + But the kernel header is not namespace clean. */ + +/* These are Linux-specific. */ +#ifdef __USE_MISC +# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */ +# define MAP_DENYWRITE 0x00800 /* ETXTBSY */ +# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */ +# define MAP_LOCKED 0x02000 /* Lock the mapping. */ +# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */ +# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */ +# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */ +# define MAP_STACK 0x20000 /* Allocation is for a stack. */ +# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ +#endif + + + +/* Include generic Linux declarations. */ +#include <bits/mman-linux.h> diff --git a/sysdeps/unix/sysv/linux/aarch64/clone.S b/sysdeps/unix/sysv/linux/aarch64/clone.S new file mode 100644 index 0000000000..f2964f4871 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/clone.S @@ -0,0 +1,104 @@ +/* Copyright (C) 1996-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/>. */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include <sysdep.h> +#define _ERRNO_H 1 +#include <bits/errno.h> + +#define CLONE_VM_BIT 8 +#define CLONE_VM (1 << CLONE_VM_BIT) + +#define CLONE_THREAD_BIT 16 +#define CLONE_THREAD (1 << CLONE_THREAD_BIT) + +/* int clone(int (*fn)(void *arg), x0 + void *child_stack, x1 + int flags, x2 + void *arg, x3 + pid_t *ptid, x4 + struct user_desc *tls, x5 + pid_t *ctid); x6 + */ + .text +ENTRY(__clone) + /* Sanity check args. */ + cbz x0, 1f + cbz x1, 1f + /* Insert the args onto the new stack. */ + stp x0, x3, [x1, #-16]! /* Fn, arg. */ + + /* Do the system call. */ + mov x0, x2 /* flags */ + + /* New sp is already in x1. */ + mov x2, x4 /* ptid */ + mov x3, x5 /* tls */ + mov x4, x6 /* ctid */ + +#ifdef RESET_PID + /* We rely on the kernel preserving the argument regsiters across a + each system call so that we can inspect the flags against after + the clone call. */ + mov x5, x0 +#endif + + mov x8, #SYS_ify(clone) + /* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid. */ + svc 0x0 + cfi_endproc + cmp x0, #0 + beq 2f + blt 3f + RET +1: mov x0, #-EINVAL +3: + b syscall_error + +2: + cfi_startproc + cfi_undefined (x30) + mov x29, 0 +#ifdef RESET_PID + tbnz x5, #CLONE_THREAD_BIT, 3f + mov x0, #-1 + tbnz x5, #CLONE_VM_BIT, 2f + mov x8, #SYS_ify(getpid) + svc 0x0 +2: + mrs x1, tpidr_el0 + sub x1, x1, #PTHREAD_SIZEOF + str w0, [x1, #PTHREAD_PID_OFFSET] + str w0, [x1, #PTHREAD_TID_OFFSET] + +3: +#endif + /* Pick the function arg and call address from the stack and + execute. */ + ldp x1, x0, [sp], #16 + blr x1 + + /* We are done, pass the return value through x0. */ + b HIDDEN_JUMPTARGET(_exit) + cfi_endproc + cfi_startproc +PSEUDO_END (__clone) + +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/aarch64/configure b/sysdeps/unix/sysv/linux/aarch64/configure new file mode 100644 index 0000000000..20593c7bb0 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/configure @@ -0,0 +1,17 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. + +arch_minimum_kernel=3.7.0 + +test -n "$libc_cv_slibdir" || +case "$prefix" in + /usr | /usr/) + libc_cv_slibdir="/lib64" + libc_cv_rtlddir="/lib" + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib64'; + # Locale data can be shared between 32bit and 64bit libraries + libc_cv_localedir='${exec_prefix}/lib/locale' + fi + ;; +esac diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac new file mode 100644 index 0000000000..b090702134 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac @@ -0,0 +1,17 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/aarch64. + +arch_minimum_kernel=3.7.0 + +test -n "$libc_cv_slibdir" || +case "$prefix" in + /usr | /usr/) + libc_cv_slibdir="/lib64" + libc_cv_rtlddir="/lib" + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/lib64'; + # Locale data can be shared between 32bit and 64bit libraries + libc_cv_localedir='${exec_prefix}/lib/locale' + fi + ;; +esac diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-cache.h b/sysdeps/unix/sysv/linux/aarch64/dl-cache.h new file mode 100644 index 0000000000..32851d00b2 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/dl-cache.h @@ -0,0 +1,45 @@ +/* Support for reading /etc/ld.so.cache files written by Linux ldconfig. + Copyright (C) 2003-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 <ldconfig.h> + +#define _DL_CACHE_DEFAULT_ID (FLAG_AARCH64_LIB64 | FLAG_ELF_LIBC6) + +#define _dl_cache_check_flags(flags) \ + ((flags) == _DL_CACHE_DEFAULT_ID) + +#define add_system_dir(dir) \ + do \ + { \ + size_t len = strlen (dir); \ + char path[len + 3]; \ + memcpy (path, dir, len + 1); \ + if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \ + { \ + len -= 2; \ + path[len] = '\0'; \ + } \ + add_dir (path); \ + if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ + { \ + memcpy (path + len, "64", 3); \ + add_dir (path); \ + } \ + } while (0) + +#include_next <dl-cache.h> diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-static.c b/sysdeps/unix/sysv/linux/aarch64/dl-static.c new file mode 100644 index 0000000000..3c29c564ef --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/dl-static.c @@ -0,0 +1,84 @@ +/* Variable initialization. AArch64 version. + Copyright (C) 2001-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 <ldsodefs.h> + +#ifdef SHARED + +void +_dl_var_init (void *array[]) +{ + /* It has to match "variables" below. */ + enum + { + DL_PAGESIZE = 0 + }; + + GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); +} + +#else + +static void *variables[] = +{ + &GLRO(dl_pagesize) +}; + +static void +_dl_unprotect_relro (struct link_map *l) +{ + ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) + & ~(GLRO(dl_pagesize) - 1)); + ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) + & ~(GLRO(dl_pagesize) - 1)); + + if (start != end) + __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); +} + +void +_dl_static_init (struct link_map *l) +{ + struct link_map *rtld_map = l; + struct r_scope_elem **scope; + const ElfW(Sym) *ref = NULL; + lookup_t loadbase; + void (*f) (void *[]); + size_t i; + + loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, + NULL, 0, 1, NULL); + + for (scope = l->l_local_scope; *scope != NULL; scope++) + for (i = 0; i < (*scope)->r_nlist; i++) + if ((*scope)->r_list[i] == loadbase) + { + rtld_map = (*scope)->r_list[i]; + break; + } + + if (ref != NULL) + { + f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); + _dl_unprotect_relro (rtld_map); + f (variables); + _dl_protect_relro (rtld_map); + } +} + +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/getcontext.S b/sysdeps/unix/sysv/linux/aarch64/getcontext.S new file mode 100644 index 0000000000..70b2e32431 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/getcontext.S @@ -0,0 +1,108 @@ +/* Save current context. + + Copyright (C) 2009-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 <sysdep.h> +#include "ucontext_i.h" +#include "ucontext-internal.h" + +/* int getcontext (ucontext_t *ucp) + + Returns 0 on success -1 and errno on failure. + */ + + .text + +ENTRY(__getcontext) + /* The saved context will return to the getcontext() call point + with a return value of 0 */ + str xzr, [x0, oX0 + 0 * SZREG] + + stp x18, x19, [x0, oX0 + 18 * SZREG] + stp x20, x21, [x0, oX0 + 20 * SZREG] + stp x22, x23, [x0, oX0 + 22 * SZREG] + stp x24, x25, [x0, oX0 + 24 * SZREG] + stp x26, x27, [x0, oX0 + 26 * SZREG] + stp x28, x29, [x0, oX0 + 28 * SZREG] + str x30, [x0, oX0 + 30 * SZREG] + + /* Place LR into the saved PC, this will ensure that when + switching to this saved context with setcontext() control + will pass back to the caller of getcontext(), we have + already arrange to return the appropriate return value in x0 + above. */ + str x30, [x0, oPC] + + /* Save the current SP */ + mov x2, sp + str x2, [x0, oSP] + + /* Initialize the pstate. */ + str xzr, [x0, oPSTATE] + + /* Figure out where to place the first context extension + block. */ + add x2, x0, #oEXTENSION + + /* Write the context extension fpsimd header. */ + mov w3, #(FPSIMD_MAGIC & 0xffff) + movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 + str w3, [x2, #oHEAD + oMAGIC] + mov w3, #FPSIMD_CONTEXT_SIZE + str w3, [x2, #oHEAD + oSIZE] + + /* Fill in the FP SIMD context. */ + add x3, x2, #oV0 + 8 * SZVREG + stp d8, d9, [x3], # 2 * SZVREG + stp d10, d11, [x3], # 2 * SZVREG + stp d12, d13, [x3], # 2 * SZVREG + stp d14, d15, [x3], # 2 * SZVREG + + add x3, x2, oFPSR + + mrs x4, fpsr + str w4, [x3] + + mrs x4, fpcr + str w4, [x3, oFPCR - oFPSR] + + /* Write the termination context extension header. */ + add x2, x2, #FPSIMD_CONTEXT_SIZE + + str xzr, [x2, #oHEAD + oMAGIC] + str xzr, [x2, #oHEAD + oSIZE] + + /* Grab the signal mask */ + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + add x2, x0, #UCONTEXT_SIGMASK + mov x0, SIG_BLOCK + mov x1, 0 + mov x3, _NSIG8 + mov x8, SYS_ify (rt_sigprocmask) + svc 0 + cbnz x0, 1f + + /* Return 0 for success */ + mov x0, 0 + RET +1: + b C_SYMBOL_NAME(__syscall_error) + + PSEUDO_END (__getcontext) +weak_alias (__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c new file mode 100644 index 0000000000..267cfae307 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/gettimeofday.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2005-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 <errno.h> +#include <sys/time.h> + +#undef __gettimeofday + +#include <bits/libc-vdso.h> + +/* Get the current time of day and timezone information, + putting it into *tv and *tz. If tz is null, *tz is not filled. + Returns 0 on success, -1 on errors. */ +int +__gettimeofday (tv, tz) + struct timeval *tv; + struct timezone *tz; +{ + return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); +} +libc_hidden_def (__gettimeofday) +weak_alias (__gettimeofday, gettimeofday) +libc_hidden_weak (gettimeofday) diff --git a/sysdeps/unix/sysv/linux/aarch64/init-first.c b/sysdeps/unix/sysv/linux/aarch64/init-first.c new file mode 100644 index 0000000000..b16bfeb8d9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/init-first.c @@ -0,0 +1,43 @@ +/* Copyright (C) 2007-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/>. */ + +#ifdef SHARED +# include <dl-vdso.h> +# undef __gettimeofday +# undef __clock_gettime +# undef __clock_getres +# include <bits/libc-vdso.h> + +void (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden; +void (*__vdso_clock_gettime) (clockid_t, struct timespec *); +void (*__vdso_clock_getres) (clockid_t, struct timespec *); + +static inline void +_libc_vdso_platform_setup (void) +{ + PREPARE_VERSION (linux2639, "LINUX_2.6.39", 123718537); + + __vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2639); + __vdso_clock_gettime = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2639); + __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", &linux2639); +} + +# define VDSO_SETUP _libc_vdso_platform_setup +#endif + +#include <csu/init-first.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ioctl.S b/sysdeps/unix/sysv/linux/aarch64/ioctl.S new file mode 100644 index 0000000000..4443f5a4aa --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ioctl.S @@ -0,0 +1,30 @@ +/* Copyright (C) 2012-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 <sysdep.h> + + .text +ENTRY(__ioctl) + movz x8, #__NR_ioctl + sxtw x0, w0 + svc #0x0 + cmn x0, #0x1, lsl #12 + PSEUDO_RET + PSEUDO_END (__ioctl) + +weak_alias (__ioctl, ioctl) diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel-features.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h new file mode 100644 index 0000000000..c736eb9c0e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h @@ -0,0 +1,37 @@ +/* Set flags signalling availability of kernel features based on given + kernel version number. + + Copyright (C) 2009-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 <linux/version.h> + +/* AArch64 support starts with 3.7.0, guaranteeing many kernel + features. */ + +#define __ASSUME_ACCEPT4 1 +#define __ASSUME_DUP3 1 +#define __ASSUME_EVENTFD2 1 +#define __ASSUME_IN_NONBLOCK 1 +#define __ASSUME_O_CLOEXEC 1 +#define __ASSUME_PIPE2 1 +#define __ASSUME_SIGNALFD4 1 +#define __ASSUME_SOCK_CLOEXEC 1 +#define __ASSUME_UTIMES 1 + +#include_next <kernel-features.h> diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h new file mode 100644 index 0000000000..8af31f6335 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/kernel_rt_sigframe.h @@ -0,0 +1,25 @@ +/* Copyright (C) 2009-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/>. */ + +/* This structure must have the same shape as the linux kernel + equivalent. */ +struct kernel_rt_sigframe +{ + siginfo_t info; + struct ucontext uc; +}; diff --git a/sysdeps/unix/sysv/linux/aarch64/ldconfig.h b/sysdeps/unix/sysv/linux/aarch64/ldconfig.h new file mode 100644 index 0000000000..b0e6b6a2ff --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ldconfig.h @@ -0,0 +1,28 @@ +/* Copyright (C) 2009-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 <sysdeps/generic/ldconfig.h> + +#define SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "/lib/ld-linux-aarch64.so.1", FLAG_ELF_LIBC6 }, \ + { "/lib/ld-linux-aarch64_be.so.1", FLAG_ELF_LIBC6 }, \ + { "/lib/ld-linux.so.3", FLAG_ELF_LIBC6 }, \ + { "/lib/ld-linux-armhf.so.3", FLAG_ELF_LIBC6 }, +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.6", FLAG_ELF_LIBC6 }, \ + { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h b/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h new file mode 100644 index 0000000000..77942682c1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ldsodefs.h @@ -0,0 +1,32 @@ +/* Run-time dynamic linker data structures for loaded ELF shared objects. Tile. + Copyright (C) 2001-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/>. */ + +#ifndef _LDSODEFS_H + +/* Get the real definitions. */ +#include_next <ldsodefs.h> + +/* Now define our stuff. */ + +/* We need special support to initialize DSO loaded for statically linked + binaries. */ +extern void _dl_static_init (struct link_map *map); +#undef DL_STATIC_INIT +#define DL_STATIC_INIT(map) _dl_static_init (map) + +#endif /* ldsodefs.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S b/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S new file mode 100644 index 0000000000..25615aa579 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/libc-__read_tp.S @@ -0,0 +1,19 @@ +/* Copyright (C) 2009-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 <__read_tp.S> diff --git a/sysdeps/unix/sysv/linux/aarch64/makecontext.c b/sysdeps/unix/sysv/linux/aarch64/makecontext.c new file mode 100644 index 0000000000..806eab2cf9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/makecontext.c @@ -0,0 +1,74 @@ +/* Create new context. + Copyright (C) 2002-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 <sysdep.h> +#include <stdarg.h> +#include <stdint.h> +#include <ucontext.h> + + +/* makecontext sets up a stack and the registers for the + user context. The stack looks like this: + + +-----------------------+ + | padding as required | + +-----------------------+ + sp -> | parameter 7-n | + +-----------------------+ + + The registers are set up like this: + %x0 .. %x7: parameter 1 to 8 + %x19 : uc_link + %sp : stack pointer. +*/ + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + extern void __startcontext (void); + unsigned long int *sp; + va_list ap; + int i; + + sp = (unsigned long int *) + ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); + + /* Allocate stack arguments. */ + sp -= argc < 8 ? 0 : argc - 8; + + /* Keep the stack aligned. */ + sp = (unsigned long int *) (((uintptr_t) sp) & -16L); + + ucp->uc_mcontext.regs[19] = (uintptr_t) ucp->uc_link; + ucp->uc_mcontext.sp = (uintptr_t) sp; + ucp->uc_mcontext.pc = (uintptr_t) func; + ucp->uc_mcontext.regs[29] = (uintptr_t) 0; + ucp->uc_mcontext.regs[30] = (uintptr_t) &__startcontext; + + va_start (ap, argc); + for (i = 0; i < argc; ++i) + if (i < 8) + ucp->uc_mcontext.regs[i] = va_arg (ap, unsigned long int); + else + sp[i - 8] = va_arg (ap, unsigned long int); + + va_end (ap); +} + +weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/mmap.c b/sysdeps/unix/sysv/linux/aarch64/mmap.c new file mode 100644 index 0000000000..54ecc10fbc --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/mmap.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2009-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 <sys/types.h> +#include <sys/mman.h> +#include <errno.h> +#include <sys/syscall.h> +#include <sysdep.h> +#include <unistd.h> + +__ptr_t +__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) +{ + return (__ptr_t) INLINE_SYSCALL (mmap, 6, addr, len, prot, flags, fd, offset); +} + +weak_alias (__mmap, mmap) +weak_alias (__mmap, mmap64) +weak_alias (__mmap, __mmap64) diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h new file mode 100644 index 0000000000..0b01c72de4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/local_lim.h @@ -0,0 +1,101 @@ +/* Minimum guaranteed maximum values for system limits. Linux version. + Copyright (C) 1993-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/>. */ + +/* The kernel header pollutes the namespace with the NR_OPEN symbol + and defines LINK_MAX although filesystems have different maxima. A + similar thing is true for OPEN_MAX: the limit can be changed at + runtime and therefore the macro must not be defined. Remove this + after including the header if necessary. */ +#ifndef NR_OPEN +# define __undef_NR_OPEN +#endif +#ifndef LINK_MAX +# define __undef_LINK_MAX +#endif +#ifndef OPEN_MAX +# define __undef_OPEN_MAX +#endif +#ifndef ARG_MAX +# define __undef_ARG_MAX +#endif + +/* The kernel sources contain a file with all the needed information. */ +#include <linux/limits.h> + +/* Have to remove NR_OPEN? */ +#ifdef __undef_NR_OPEN +# undef NR_OPEN +# undef __undef_NR_OPEN +#endif +/* Have to remove LINK_MAX? */ +#ifdef __undef_LINK_MAX +# undef LINK_MAX +# undef __undef_LINK_MAX +#endif +/* Have to remove OPEN_MAX? */ +#ifdef __undef_OPEN_MAX +# undef OPEN_MAX +# undef __undef_OPEN_MAX +#endif +/* Have to remove ARG_MAX? */ +#ifdef __undef_ARG_MAX +# undef ARG_MAX +# undef __undef_ARG_MAX +#endif + +/* The number of data keys per process. */ +#define _POSIX_THREAD_KEYS_MAX 128 +/* This is the value this implementation supports. */ +#define PTHREAD_KEYS_MAX 1024 + +/* Controlling the iterations of destructors for thread-specific data. */ +#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 +/* Number of iterations this implementation does. */ +#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS + +/* The number of threads per process. */ +#define _POSIX_THREAD_THREADS_MAX 64 +/* We have no predefined limit on the number of threads. */ +#undef PTHREAD_THREADS_MAX + +/* Maximum amount by which a process can descrease its asynchronous I/O + priority level. */ +#define AIO_PRIO_DELTA_MAX 20 + +/* Minimum size for a thread. At least two pages for systems with 64k + pages. */ +#define PTHREAD_STACK_MIN 131072 + +/* Maximum number of timer expiration overruns. */ +#define DELAYTIMER_MAX 2147483647 + +/* Maximum tty name length. */ +#define TTY_NAME_MAX 32 + +/* Maximum login name length. This is arbitrary. */ +#define LOGIN_NAME_MAX 256 + +/* Maximum host name length. */ +#define HOST_NAME_MAX 64 + +/* Maximum message queue priority level. */ +#define MQ_PRIO_MAX 32768 + +/* Maximum value the semaphore can have. */ +#define SEM_VALUE_MAX (2147483647) diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h new file mode 100644 index 0000000000..f11eeabb17 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/pthreadtypes.h @@ -0,0 +1,169 @@ +/* Copyright (C) 2002-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/>. */ + +#ifndef _BITS_PTHREADTYPES_H +#define _BITS_PTHREADTYPES_H 1 + +#include <endian.h> + +#define __SIZEOF_PTHREAD_ATTR_T 64 +#define __SIZEOF_PTHREAD_MUTEX_T 48 +#define __SIZEOF_PTHREAD_MUTEXATTR_T 8 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_COND_COMPAT_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 8 +#define __SIZEOF_PTHREAD_RWLOCK_T 56 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIER_T 32 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 8 + + +/* Thread identifiers. The structure of the attribute type is not + exposed on purpose. */ +typedef unsigned long int pthread_t; + + +union pthread_attr_t +{ + char __size[__SIZEOF_PTHREAD_ATTR_T]; + long int __align; +}; +#ifndef __have_pthread_attr_t +typedef union pthread_attr_t pthread_attr_t; +# define __have_pthread_attr_t1 +#endif + +typedef struct __pthread_internal_list +{ + struct __pthread_internal_list *__prev; + struct __pthread_internal_list *__next; +} __pthread_list_t; + + +/* Data structures for mutex handling. The structure of the attribute + type is not exposed on purpose. */ +typedef union +{ + struct __pthread_mutex_s + { + int __lock; + unsigned int __count; + int __owner; + unsigned int __nusers; + int __kind; + int __spins; + __pthread_list_t __list; +#define __PTHREAD_MUTEX_HAVE_PREV 1 + } __data; + char __size[__SIZEOF_PTHREAD_MUTEX_T]; + long int __align; +} pthread_mutex_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; + long int __align; +} pthread_mutexattr_t; + + +/* Data structure for conditional variable handling. The structure of + the attribute type is not exposed on purpose. */ +typedef union +{ + struct + { + int __lock; + unsigned int __futex; + __extension__ unsigned long long int __total_seq; + __extension__ unsigned long long int __wakeup_seq; + __extension__ unsigned long long int __woken_seq; + void *__mutex; + unsigned int __nwaiters; + unsigned int __broadcast_seq; + } __data; + char __size[__SIZEOF_PTHREAD_COND_T]; + long int __align; +} pthread_cond_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_CONDATTR_T]; + int __align; +} pthread_condattr_t; + + +/* Keys for thread-specific data */ +typedef unsigned int pthread_key_t; + + +/* Once-only execution */ +typedef int pthread_once_t; + + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +/* Data structure for read-write lock variable handling. The + structure of the attribute type is not exposed on purpose. */ +typedef union +{ + struct + { + int __lock; + unsigned int __nr_readers; + unsigned int __readers_wakeup; + unsigned int __writer_wakeup; + unsigned int __nr_readers_queued; + unsigned int __nr_writers_queued; + int __writer; + int __shared; + unsigned long int __pad1; + unsigned long int __pad2; + unsigned int __flags; + } __data; + char __size[__SIZEOF_PTHREAD_RWLOCK_T]; + long int __align; +} pthread_rwlock_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; + long int __align; +} pthread_rwlockattr_t; +#endif + + +#ifdef __USE_XOPEN2K +/* POSIX spinlock data type. */ +typedef volatile int pthread_spinlock_t; + + +/* POSIX barriers data type. The structure of the type is + deliberately not exposed. */ +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIER_T]; + long int __align; +} pthread_barrier_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; + int __align; +} pthread_barrierattr_t; +#endif + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h new file mode 100644 index 0000000000..c865de786d --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/bits/semaphore.h @@ -0,0 +1,35 @@ +/* Copyright (C) 2002-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/>. */ + +#ifndef _SEMAPHORE_H +# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead." +#endif + + +#define __SIZEOF_SEM_T 32 + + +/* Value returned if `sem_open' failed. */ +#define SEM_FAILED ((sem_t *) 0) + + +typedef union +{ + char __size[__SIZEOF_SEM_T]; + long int __align; +} sem_t; diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data b/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data new file mode 100644 index 0000000000..ac925ccb36 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/c++-types.data @@ -0,0 +1,67 @@ +blkcnt64_t:l +blkcnt_t:l +blksize_t:i +caddr_t:Pc +clockid_t:i +clock_t:l +daddr_t:i +dev_t:m +fd_mask:l +fsblkcnt64_t:m +fsblkcnt_t:m +fsfilcnt64_t:m +fsfilcnt_t:m +fsid_t:8__fsid_t +gid_t:j +id_t:j +ino64_t:m +ino_t:m +int16_t:s +int32_t:i +int64_t:l +int8_t:a +intptr_t:l +key_t:i +loff_t:l +mode_t:j +nlink_t:j +off64_t:l +off_t:l +pid_t:i +pthread_attr_t:14pthread_attr_t +pthread_barrier_t:17pthread_barrier_t +pthread_barrierattr_t:21pthread_barrierattr_t +pthread_cond_t:14pthread_cond_t +pthread_condattr_t:18pthread_condattr_t +pthread_key_t:j +pthread_mutex_t:15pthread_mutex_t +pthread_mutexattr_t:19pthread_mutexattr_t +pthread_once_t:i +pthread_rwlock_t:16pthread_rwlock_t +pthread_rwlockattr_t:20pthread_rwlockattr_t +pthread_spinlock_t:i +pthread_t:m +quad_t:l +register_t:l +rlim64_t:m +rlim_t:m +sigset_t:10__sigset_t +size_t:m +socklen_t:j +ssize_t:l +suseconds_t:l +time_t:l +u_char:h +uid_t:j +uint:j +u_int:j +u_int16_t:t +u_int32_t:j +u_int64_t:m +u_int8_t:h +ulong:m +u_long:m +u_quad_t:m +useconds_t:j +ushort:t +u_short:t diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S b/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S new file mode 100644 index 0000000000..281be3b670 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/clone.S @@ -0,0 +1,21 @@ +/* Copyright (C) 2009-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/>. */ + +#define RESET_PID +#include <tcb-offsets.h> +#include "../clone.S" diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c b/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c new file mode 100644 index 0000000000..e5f1e4dcf9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/createthread.c @@ -0,0 +1,23 @@ +/* Copyright (C) 2005-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/>. */ + +/* Value passed to 'clone' for initialization of the thread register. */ +#define TLS_VALUE (pd + 1) + +/* Get the real implementation. */ +#include <sysdeps/pthread/createthread.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c b/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c new file mode 100644 index 0000000000..79a2ec5861 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/fork.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2005-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 <sched.h> +#include <signal.h> +#include <sysdep.h> +#include <tls.h> + + +#define ARCH_FORK() \ + INLINE_SYSCALL (clone, 5, \ + CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ + NULL, NULL, NULL, &THREAD_SELF->tid) + +#include <sysdeps/unix/sysv/linux/fork.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist new file mode 100644 index 0000000000..8629c4eac4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/ld.abilist @@ -0,0 +1,12 @@ +GLIBC_2.17 + GLIBC_2.17 A + __libc_memalign F + __libc_stack_end D 0x8 + __stack_chk_guard D 0x8 + __tls_get_addr F + _dl_mcount F + _r_debug D 0x28 + calloc F + free F + malloc F + realloc F diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist new file mode 100644 index 0000000000..92c43d9b79 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libBrokenLocale.abilist @@ -0,0 +1,3 @@ +GLIBC_2.17 + GLIBC_2.17 A + __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.abilist new file mode 100644 index 0000000000..0d32f2ed47 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libanl.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/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist new file mode 100644 index 0000000000..aeee312289 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist @@ -0,0 +1,2083 @@ +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 + ___brk_addr D 0x8 + __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 + __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 + __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 + __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 + __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 + _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 + _mcount F diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.abilist new file mode 100644 index 0000000000..177c536209 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libcrypt.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/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.abilist new file mode 100644 index 0000000000..6caff88266 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libdl.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/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist new file mode 100644 index 0000000000..0f1cfc8702 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libm.abilist @@ -0,0 +1,402 @@ +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 + __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 + __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/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.abilist new file mode 100644 index 0000000000..763b8dc166 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libnsl.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/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.abilist new file mode 100644 index 0000000000..5520312635 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libpthread.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/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.abilist new file mode 100644 index 0000000000..ed312c0e6e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libresolv.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/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/librt.abilist new file mode 100644 index 0000000000..f89f83ea86 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/librt.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/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.abilist new file mode 100644 index 0000000000..52f8d0793b --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libthread_db.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/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist b/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.abilist new file mode 100644 index 0000000000..7e75bb2ea8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/libutil.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/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data b/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data new file mode 100644 index 0000000000..84af95dc36 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data @@ -0,0 +1,15 @@ +# See scripts/check-localplt.awk for how this file is processed. +# PLT use is required for the malloc family and for matherr because +# users can define their own functions and have library internals call them. +libc.so: calloc +libc.so: free +libc.so: malloc +libc.so: memalign +libc.so: realloc +libc.so: __signbit +libc.so: __signbitl +libm.so: matherr +libm.so: __signbit +libm.so: __signbitf +libm.so: __signbitl +libpthread.so: __errno_location diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h b/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h new file mode 100644 index 0000000000..69a5f278eb --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/lowlevellock.h @@ -0,0 +1,326 @@ +/* Copyright (C) 2005-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/>. */ + +#ifndef _LOWLEVELLOCK_H +#define _LOWLEVELLOCK_H 1 + +#include <time.h> +#include <sys/param.h> +#include <bits/pthreadtypes.h> +#include <atomic.h> +#include <sysdep.h> +#include <kernel-features.h> + +#define FUTEX_WAIT 0 +#define FUTEX_WAKE 1 +#define FUTEX_REQUEUE 3 +#define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 +#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 +#define FUTEX_WAIT_BITSET 9 +#define FUTEX_WAKE_BITSET 10 +#define FUTEX_WAIT_REQUEUE_PI 11 +#define FUTEX_CMP_REQUEUE_PI 12 +#define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_CLOCK_REALTIME 256 + +#define FUTEX_BITSET_MATCH_ANY 0xffffffff + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait(futexp, val, NULL, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ + __ret; \ + }) + +#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + int __op = FUTEX_WAIT_BITSET | clockbit; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp), \ + __lll_private_flag (__op, private), \ + (val), (timespec), NULL /* Unused. */, \ + FUTEX_BITSET_MATCH_ANY); \ + __ret; \ + }) + +#define lll_futex_wake(futexp, nr, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ + __ret; \ + }) + +#define lll_robust_dead(futexv, private) \ + do \ + { \ + int *__futexp = &(futexv); \ + atomic_or (__futexp, FUTEX_OWNER_DIED); \ + lll_futex_wake (__futexp, 1, private); \ + } \ + while (0) + +/* Returns non-zero if error happened, zero if success. */ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + + +/* Returns non-zero if error happened, zero if success. */ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ + FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + + +/* Priority Inheritance support. */ +#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ + lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) + +#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \ + mutex, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp), \ + __lll_private_flag (__op, private), \ + (val), (timespec), mutex); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ + }) + +#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\ + (nr_wake), (nr_move), (mutex), (val)); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + + +#define lll_trylock(lock) \ + atomic_compare_and_exchange_val_acq(&(lock), 1, 0) + +#define lll_cond_trylock(lock) \ + atomic_compare_and_exchange_val_acq(&(lock), 2, 0) + +#define __lll_robust_trylock(futex, id) \ + (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) +#define lll_robust_trylock(lock, id) \ + __lll_robust_trylock (&(lock), id) + +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; + +#define __lll_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, \ + 1, 0), 0)) \ + { \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__futex); \ + else \ + __lll_lock_wait (__futex, private); \ + } \ + })) +#define lll_lock(futex, private) __lll_lock (&(futex), private) + + +#define __lll_robust_lock(futex, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_lock_wait (__futex, private); \ + __val; \ + }) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) + + +#define __lll_cond_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_exchange_acq (__futex, 2), 0)) \ + __lll_lock_wait (__futex, private); \ + })) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) + + +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) + + +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; + +#define __lll_timedlock(futex, abstime, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_exchange_acq (__futex, 1), 0)) \ + __val = __lll_timedlock_wait (__futex, abstime, private); \ + __val; \ + }) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) + + +#define __lll_robust_timedlock(futex, abstime, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ + __val; \ + }) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) + + +#define __lll_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) + +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) + + +#define __lll_robust_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) + + +#define lll_islocked(futex) \ + (futex != 0) + + +/* Our internal lock implementation is identical to the binary-compatible + mutex implementation. */ + +/* Initializers for lock. */ +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) + +/* The states of a lock are: + 0 - untaken + 1 - taken by one user + >1 - taken by more users */ + +/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex + wakeup when the clone terminates. The memory location contains the + thread ID while the clone is running and is reset to zero + afterwards. */ +#define lll_wait_tid(tid) \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED);\ + } while (0) + +extern int __lll_timedwait_tid (int *, const struct timespec *) + attribute_hidden; + +#define lll_timedwait_tid(tid, abstime) \ + ({ \ + int __res = 0; \ + if ((tid) != 0) \ + __res = __lll_timedwait_tid (&(tid), (abstime)); \ + __res; \ + }) + +#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S b/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S new file mode 100644 index 0000000000..2108347118 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/pt-vfork.S @@ -0,0 +1,35 @@ +/* Copyright (C) 2009-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 <tcb-offsets.h> + +/* Save the PID value. */ +#define SAVE_PID \ + mrs x2, tpidr_el0; \ + sub x2, x2, #PTHREAD_SIZEOF; \ + ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ + neg w0, w3; \ + str w0, [x2, #PTHREAD_PID_OFFSET] + +/* Restore the old PID value in the parent. */ +#define RESTORE_PID \ + cbz x0, 1f; \ + str w3, [x2, #PTHREAD_PID_OFFSET]; \ +1: + +#include "../vfork.S" diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c new file mode 100644 index 0000000000..d1b28ff51f --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c @@ -0,0 +1,90 @@ +/* Copyright (C) 2004-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 "pthreadP.h" +#include <lowlevellock.h> + +unsigned long int __fork_generation attribute_hidden; + +static void +clear_once_control (void *arg) +{ + pthread_once_t *once_control = (pthread_once_t *) arg; + + *once_control = 0; + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); +} + +int +__pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) +{ + for (;;) + { + int oldval; + int newval; + + /* Pseudo code: + newval = __fork_generation | 1; + oldval = *once_control; + if ((oldval & 2) == 0) + *once_control = newval; + Do this atomically. + */ + do + { + newval = __fork_generation | 1; + oldval = *once_control; + if (oldval & 2) + break; + } while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval); + + /* Check if the initializer has already been done. */ + if ((oldval & 2) != 0) + return 0; + + /* Check if another thread already runs the initializer. */ + if ((oldval & 1) == 0) + break; + + /* Check whether the initializer execution was interrupted by a fork. */ + if (oldval != newval) + break; + + /* Same generation, some other thread was faster. Wait. */ + lll_futex_wait (once_control, oldval, LLL_PRIVATE); + } + + /* This thread is the first here. Do the initialization. + Register a cleanup handler so that in case the thread gets + interrupted the initialization can be restarted. */ + pthread_cleanup_push (clear_once_control, once_control); + + init_routine (); + + pthread_cleanup_pop (0); + + /* Say that the initialisation is done. */ + *once_control = __fork_generation | 2; + + /* Wake up all other threads. */ + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); + + return 0; +} +weak_alias (__pthread_once, pthread_once) +hidden_def (__pthread_once) diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h new file mode 100644 index 0000000000..f6903b5dd8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h @@ -0,0 +1,205 @@ +/* Copyright (C) 2003-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 <sysdep.h> +#include <tls.h> +#ifndef __ASSEMBLER__ +# include <nptl/pthreadP.h> +#endif + +#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ + .section ".text"; \ + .type __##syscall_name##_nocancel,%function; \ + .globl __##syscall_name##_nocancel; \ + __##syscall_name##_nocancel: \ + cfi_startproc; \ + DO_CALL (syscall_name, args); \ + PSEUDO_RET; \ + cfi_endproc; \ + .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \ + ENTRY (name); \ + SINGLE_THREAD_P; \ + DOARGS_##args; \ + bne .Lpseudo_cancel; \ + DO_CALL (syscall_name, 0); \ + UNDOARGS_##args; \ + cmn x0, 4095; \ + PSEUDO_RET; \ + .Lpseudo_cancel: \ + DOCARGS_##args; /* save syscall args etc. around CENABLE. */ \ + CENABLE; \ + mov x16, x0; /* put mask in safe place. */ \ + UNDOCARGS_##args; /* restore syscall args. */ \ + mov x8, SYS_ify (syscall_name); /* do the call. */ \ + svc 0; \ + str x0, [sp, -16]!; /* save syscall return value. */ \ + cfi_adjust_cfa_offset (16); \ + mov x0, x16; /* get mask back. */ \ + CDISABLE; \ + ldr x0, [sp], 16; \ + cfi_adjust_cfa_offset (-16); \ + ldr x30, [sp], 16; \ + cfi_adjust_cfa_offset (-16); \ + cfi_restore (x30); \ + UNDOARGS_##args; \ + cmn x0, 4095; + +# define DOCARGS_0 \ + str x30, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x30, 0) + +# define UNDOCARGS_0 + +# define DOCARGS_1 \ + DOCARGS_0; \ + str x0, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x0, 0) + +# define UNDOCARGS_1 \ + ldr x0, [sp], 16; \ + cfi_restore (x0); \ + cfi_adjust_cfa_offset (-16); \ + +# define DOCARGS_2 \ + DOCARGS_1; \ + str x1, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x1, 0) + +# define UNDOCARGS_2 \ + ldr x1, [sp], 16; \ + cfi_restore (x1); \ + cfi_adjust_cfa_offset (-16); \ + UNDOCARGS_1 + +# define DOCARGS_3 \ + DOCARGS_2; \ + str x2, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x2, 0) + +# define UNDOCARGS_3 \ + ldr x2, [sp], 16; \ + cfi_restore (x2); \ + cfi_adjust_cfa_offset (-16); \ + UNDOCARGS_2 + +# define DOCARGS_4 \ + DOCARGS_3; \ + str x3, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x3, 0) + +# define UNDOCARGS_4 \ + ldr x3, [sp], 16; \ + cfi_restore (x3); \ + cfi_adjust_cfa_offset (-16); \ + UNDOCARGS_3 + +# define DOCARGS_5 \ + DOCARGS_4; \ + str x4, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x4, 0) + +# define UNDOCARGS_5 \ + ldr x4, [sp], 16; \ + cfi_restore (x4); \ + cfi_adjust_cfa_offset (-16); \ + UNDOCARGS_4 + +# define DOCARGS_6 \ + DOCARGS_5; \ + str x5, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x5, 0) + +# define UNDOCARGS_6 \ + ldr x5, [sp], 16; \ + cfi_restore (x5); \ + cfi_adjust_cfa_offset (-16); \ + UNDOCARGS_5 + +# ifdef IS_IN_libpthread +# define CENABLE bl __pthread_enable_asynccancel +# define CDISABLE bl __pthread_disable_asynccancel +# define __local_multiple_threads __pthread_multiple_threads +# elif !defined NOT_IN_libc +# define CENABLE bl __libc_enable_asynccancel +# define CDISABLE bl __libc_disable_asynccancel +# define __local_multiple_threads __libc_multiple_threads +# elif defined IS_IN_librt +# define CENABLE bl __librt_enable_asynccancel +# define CDISABLE bl __librt_disable_asynccancel +# else +# error Unsupported library +# endif + +# if defined IS_IN_libpthread || !defined NOT_IN_libc +# ifndef __ASSEMBLER__ +extern int __local_multiple_threads attribute_hidden; +# define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) +# else +# define SINGLE_THREAD_P \ + adrp x16, __local_multiple_threads; \ + add x16, x16, #:lo12:__local_multiple_threads; \ + ldr x16, [x16]; \ + cmp x16, 0; +# endif +# else +/* There is no __local_multiple_threads for librt, so use the TCB. */ +# ifndef __ASSEMBLER__ +# define SINGLE_THREAD_P \ + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ + header.multiple_threads) == 0, 1) +# else +# define SINGLE_THREAD_P \ + stp x0, x30, [sp, -16]!; \ + cfi_adjust_cfa_offset (16); \ + cfi_rel_offset (x0, 0); \ + cfi_rel_offset (x30, 8); \ + bl __read_tp; \ + sub x0, x0, PTHREAD_SIZEOF; \ + ldr x16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET]; \ + ldp x0, x30, [sp], 16; \ + cfi_restore (x0); \ + cfi_restore (x30); \ + cfi_adjust_cfa_offset (-16); \ + cmp x16, 0 +# define SINGLE_THREAD_P_PIC(x) SINGLE_THREAD_P +# endif +# endif + +#elif !defined __ASSEMBLER__ + +/* For rtld, et cetera. */ +# define SINGLE_THREAD_P 1 +# define NO_CANCELLATION 1 + +#endif + +#ifndef __ASSEMBLER__ +# define RTLD_SINGLE_THREAD_P \ + __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ + header.multiple_threads) == 0, 1) +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S b/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S new file mode 100644 index 0000000000..cc056085da --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/nptl/vfork.S @@ -0,0 +1,37 @@ +/* Copyright (C) 2005-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 <tcb-offsets.h> + +/* Save the PID value. */ +#define SAVE_PID \ + mrs x2, tpidr_el0; \ + sub x2, x2, #PTHREAD_SIZEOF; \ + ldr w3, [x2, #PTHREAD_PID_OFFSET]; \ + cmp w3, #0; \ + mov w0, #0x80000000; \ + csneg w0, w0, w3, eq; \ + str w0, [x2, #PTHREAD_PID_OFFSET] + +/* Restore the old PID value in the parent. */ +#define RESTORE_PID \ + cbz x0, 1f; /* If we are the parent... */ \ + str w3, [x2, #PTHREAD_PID_OFFSET]; /* restore the saved PID. */ \ +1: + +#include "../vfork.S" diff --git a/sysdeps/unix/sysv/linux/aarch64/profil-counter.h b/sysdeps/unix/sysv/linux/aarch64/profil-counter.h new file mode 100644 index 0000000000..f89339832c --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/profil-counter.h @@ -0,0 +1,20 @@ +/* Copyright (C) 2009-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/>. */ + +/* We can use the ix86 version. */ +#include <sysdeps/unix/sysv/linux/i386/profil-counter.h> diff --git a/sysdeps/unix/sysv/linux/aarch64/readelflib.c b/sysdeps/unix/sysv/linux/aarch64/readelflib.c new file mode 100644 index 0000000000..2d8a7f1246 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/readelflib.c @@ -0,0 +1,18 @@ +/* Copyright (C) 2012-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 "../arm/readelflib.c" diff --git a/sysdeps/unix/sysv/linux/aarch64/setcontext.S b/sysdeps/unix/sysv/linux/aarch64/setcontext.S new file mode 100644 index 0000000000..d220c41f67 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/setcontext.S @@ -0,0 +1,89 @@ +/* Set current context. + + Copyright (C) 2009-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 <sysdep.h> +#include "ucontext_i.h" +#include "ucontext-internal.h" + +/* int setcontext (const ucontext_t *ucp) */ + + .text + +ENTRY(__setcontext) + + /* Create a signal frame on the stack: + + fp + lr + ... + sp-> rt_sigframe + */ + + stp x29, x30, [sp, -16]! + cfi_adjust_cfa_offset (16) + cfi_rel_offset (x29, 0) + cfi_rel_offset (x30, 8) + + mov x29, sp + cfi_def_cfa_register (x29) + + /* Allocate space for the sigcontext. */ + mov w3, #((RT_SIGFRAME_SIZE + SP_ALIGN_SIZE) & SP_ALIGN_MASK) + sub sp, sp, x3 + + /* Compute the base address of the ucontext structure. */ + add x1, sp, #RT_SIGFRAME_UCONTEXT + + /* Only ucontext is required in the frame, *copy* it in. */ + +#if UCONTEXT_SIZE % 16 +#error The implementation of setcontext.S assumes sizeof(ucontext_t) % 16 == 0 +#endif + + mov x2, #UCONTEXT_SIZE / 16 +0: + ldp x3, x4, [x0], #16 + stp x3, x4, [x1], #16 + sub x2, x2, 1 + cbnz x2, 0b + + /* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe. */ + mov x8, SYS_ify (rt_sigreturn) + svc 0 + + /* Ooops we failed. Recover the stack */ + + mov sp, x29 + cfi_def_cfa_register (sp) + + ldp x29, x30, [sp], 16 + cfi_adjust_cfa_offset (16) + cfi_restore (x29) + cfi_restore (x30) + b C_SYMBOL_NAME(__syscall_error) + +PSEUDO_END (__setcontext) +weak_alias (__setcontext, setcontext) + +ENTRY(__startcontext) + mov x0, x19 + cbnz x0, __setcontext +1: b HIDDEN_JUMPTARGET(_exit) +END(__startcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/sigaction.c b/sysdeps/unix/sysv/linux/aarch64/sigaction.c new file mode 100644 index 0000000000..418207f68d --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sigaction.c @@ -0,0 +1,80 @@ +/* Copyright (C) 1997-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 <errno.h> +#include <signal.h> +#include <string.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +#include <kernel-features.h> + +#define SA_RESTORER 0x04000000 + +/* The difference here is that the sigaction structure used in the + kernel is not the same as we use in the libc. Therefore we must + translate it here. */ +#include <kernel_sigaction.h> + +int +__libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) +{ + int result; + struct kernel_sigaction kact; + struct kernel_sigaction koact; + + if (act) + { + kact.k_sa_handler = act->sa_handler; + memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); + kact.sa_flags = act->sa_flags; +#ifdef HAVE_SA_RESTORER + if (kact.sa_flags & SA_RESTORER) + kact.sa_restorer = act->sa_restorer; +#endif + } + + result = INLINE_SYSCALL (rt_sigaction, 4, sig, + act ? &kact : NULL, + oact ? &koact : NULL, _NSIG / 8); + if (result >= 0 || errno != ENOSYS) + { + if (oact && result >= 0) + { + oact->sa_handler = koact.k_sa_handler; + memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); + oact->sa_flags = koact.sa_flags; +#ifdef HAVE_SA_RESTORER + oact->sa_restorer = koact.sa_restorer; +#endif + } + } + return result; +} +libc_hidden_def (__libc_sigaction) + +#ifdef WRAPPER_INCLUDE +# include WRAPPER_INCLUDE +#endif + +#ifndef LIBC_SIGACTION +weak_alias (__libc_sigaction, __sigaction) +libc_hidden_weak (__sigaction) +weak_alias (__libc_sigaction, sigaction) +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h new file mode 100644 index 0000000000..3291fd97e3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h @@ -0,0 +1,35 @@ +/* AArch64 definitions for signal handling calling conventions. + Copyright (C) 1996-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 <sys/ucontext.h> +#include "kernel-features.h" + +#define SIGCONTEXT siginfo_t *_si, struct ucontext * +#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.pc) + +/* There is no reliable way to get the sigcontext unless we use a + three-argument signal handler. */ +#define __sigaction(sig, act, oact) ({ \ + (act)->sa_flags |= SA_SIGINFO; \ + (__sigaction) (sig, act, oact); \ +}) + +#define sigaction(sig, act, oact) ({ \ + (act)->sa_flags |= SA_SIGINFO; \ + (sigaction) (sig, act, oact); \ +}) diff --git a/sysdeps/unix/sysv/linux/aarch64/swapcontext.S b/sysdeps/unix/sysv/linux/aarch64/swapcontext.S new file mode 100644 index 0000000000..deb27fa46c --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/swapcontext.S @@ -0,0 +1,100 @@ +/* Modify saved context. + + Copyright (C) 2009-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 <sysdep.h> + +#include "ucontext_i.h" +#include "ucontext-internal.h" + +/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ + + .text +ENTRY(__swapcontext) + /* Set the value returned when swapcontext() returns in this context. */ + str xzr, [x0, oX0 + 0 * SZREG] + + stp x18, x19, [x0, oX0 + 18 * SZREG] + stp x20, x21, [x0, oX0 + 20 * SZREG] + stp x22, x23, [x0, oX0 + 22 * SZREG] + stp x24, x25, [x0, oX0 + 24 * SZREG] + stp x26, x27, [x0, oX0 + 26 * SZREG] + stp x28, x29, [x0, oX0 + 28 * SZREG] + str x30, [x0, oX0 + 30 * SZREG] + str x30, [x0, oPC] + mov x2, sp + str x2, [x0, oSP] + + /* Figure out where to place the first context extension + block. */ + add x2, x0, #oEXTENSION + + /* Write the context extension fpsimd header. */ + mov w3, #(FPSIMD_MAGIC & 0xffff) + movk w3, #(FPSIMD_MAGIC >> 16), lsl #16 + str w3, [x2, #oHEAD + oMAGIC] + mov w3, #FPSIMD_CONTEXT_SIZE + str w3, [x2, #oHEAD + oSIZE] + + /* Fill in the FP SIMD context. */ + add x3, x2, #oV0 + 8 * SZVREG + stp d8, d9, [x3], #2 * SZVREG + stp d10, d11, [x3], #2 * SZVREG + stp d12, d13, [x3], #2 * SZVREG + stp d14, d15, [x3], #2 * SZVREG + + add x3, x2, #oFPSR + + mrs x4, fpsr + str w4, [x3, #oFPSR - oFPSR] + + mrs x4, fpcr + str w4, [x3, #oFPCR - oFPSR] + + /* Write the termination context extension header. */ + add x2, x2, #FPSIMD_CONTEXT_SIZE + + str xzr, [x2, #oHEAD + oMAGIC] + str xzr, [x2, #oHEAD + oSIZE] + + /* Preserve ucp. */ + mov x21, x1 + + /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, + _NSIG8) */ + /* Grab the signal mask */ + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + add x2, x0, #UCONTEXT_SIGMASK + mov x0, SIG_BLOCK + mov x1, 0 + mov x3, _NSIG8 + mov x8, SYS_ify (rt_sigprocmask) + svc 0 + cbnz x0, 1f + + mov x22, x30 + mov x0, x21 + bl JUMPTARGET (__setcontext) + mov x30, x22 + RET + +1: + b C_SYMBOL_NAME(__syscall_error) +PSEUDO_END (__swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/elf.h b/sysdeps/unix/sysv/linux/aarch64/sys/elf.h new file mode 100644 index 0000000000..b65832f6e5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sys/elf.h @@ -0,0 +1,26 @@ +/* Copyright (C) 1996-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/>. */ + +#ifndef _SYS_ELF_H +#define _SYS_ELF_H 1 + +#warning "This header is obsolete; use <sys/procfs.h> instead." + +#include <sys/procfs.h> + +#endif /* sys/elf.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h b/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h new file mode 100644 index 0000000000..b02af8ac1a --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h @@ -0,0 +1,134 @@ +/* Copyright (C) 1996-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/>. */ + +#ifndef _SYS_PROCFS_H +#define _SYS_PROCFS_H 1 + +/* This is somewhat modelled after the file of the same name on SVR4 + systems. It provides a definition of the core file format for ELF + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ + +#include <features.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/user.h> + +/* We need to see the definition of struct pt_regs but do not want the + linux PTRACE_* defines since they conflict with the generic eglibc + definitions in sys/ptrace.h Hence the undef's below. */ +#include <asm/ptrace.h> + +#undef PTRACE_GET_THREAD_AREA +#undef PTRACE_GETHBPREGS +#undef PTRACE_SETHBPREGS + +#include <sys/user.h> + +__BEGIN_DECLS + +/* Type for a general-purpose register. */ +typedef unsigned long elf_greg_t; + +/* And the whole bunch of them. We could have used `struct + pt_regs' directly in the typedef, but tradition says that + the register set is an array, which does have some peculiar + semantics, so leave it that way. */ +#define ELF_NGREG (sizeof (struct user_pt_regs) / sizeof(elf_greg_t)) +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +/* Register set for the floating-point registers. */ +typedef struct user_fpsimd_state elf_fpregset_t; + +/* Signal info. */ +struct elf_siginfo + { + int si_signo; /* Signal number. */ + int si_code; /* Extra code. */ + int si_errno; /* Errno. */ + }; + +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + +struct elf_prstatus + { + struct elf_siginfo pr_info; /* Info associated with signal. */ + short int pr_cursig; /* Current signal. */ + unsigned long int pr_sigpend; /* Set of pending signals. */ + unsigned long int pr_sighold; /* Set of held signals. */ + __pid_t pr_pid; + __pid_t pr_ppid; + __pid_t pr_pgrp; + __pid_t pr_sid; + struct timeval pr_utime; /* User time. */ + struct timeval pr_stime; /* System time. */ + struct timeval pr_cutime; /* Cumulative user time. */ + struct timeval pr_cstime; /* Cumulative system time. */ + elf_gregset_t pr_reg; /* GP registers. */ + int pr_fpvalid; /* True if math copro being used. */ + }; + + +#define ELF_PRARGSZ (80) /* Number of chars for args. */ + +struct elf_prpsinfo + { + char pr_state; /* Numeric process state. */ + char pr_sname; /* Char for pr_state. */ + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ + unsigned short int pr_uid; + unsigned short int pr_gid; + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + /* Lots missing */ + char pr_fname[16]; /* Filename of executable. */ + char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ + }; + +/* The rest of this file provides the types for emulation of the + Solaris <proc_service.h> interfaces that should be implemented by + users of libthread_db. */ + +/* Addresses. */ +typedef void *psaddr_t; + +/* Register sets. Linux has different names. */ +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, + therefore have only one PID type. */ +typedef __pid_t lwpid_t; + +/* Process status and info. In the end we do provide typedefs for them. */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +__END_DECLS + +#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h new file mode 100644 index 0000000000..ca57bb50e5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h @@ -0,0 +1,194 @@ +/* `ptrace' debugger support interface. Linux version. + Copyright (C) 1996-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/>. */ + +#ifndef _SYS_PTRACE_H +#define _SYS_PTRACE_H 1 + +#include <features.h> +#include <bits/types.h> + +__BEGIN_DECLS + +/* Type of the REQUEST argument to `ptrace.' */ +enum __ptrace_request +{ + /* Indicate that the process making this request should be traced. + All signals received by this process can be intercepted by its + parent, and its parent can use the other `ptrace' requests. */ + PTRACE_TRACEME = 0, +#define PT_TRACE_ME PTRACE_TRACEME + + /* Return the word in the process's text space at address ADDR. */ + PTRACE_PEEKTEXT = 1, +#define PT_READ_I PTRACE_PEEKTEXT + + /* Return the word in the process's data space at address ADDR. */ + PTRACE_PEEKDATA = 2, +#define PT_READ_D PTRACE_PEEKDATA + + /* Return the word in the process's user area at offset ADDR. */ + PTRACE_PEEKUSER = 3, +#define PT_READ_U PTRACE_PEEKUSER + + /* Write the word DATA into the process's text space at address ADDR. */ + PTRACE_POKETEXT = 4, +#define PT_WRITE_I PTRACE_POKETEXT + + /* Write the word DATA into the process's data space at address ADDR. */ + PTRACE_POKEDATA = 5, +#define PT_WRITE_D PTRACE_POKEDATA + + /* Write the word DATA into the process's user area at offset ADDR. */ + PTRACE_POKEUSER = 6, +#define PT_WRITE_U PTRACE_POKEUSER + + /* Continue the process. */ + PTRACE_CONT = 7, +#define PT_CONTINUE PTRACE_CONT + + /* Kill the process. */ + PTRACE_KILL = 8, +#define PT_KILL PTRACE_KILL + + /* Single step the process. */ + PTRACE_SINGLESTEP = 9, +#define PT_STEP PTRACE_SINGLESTEP + + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 16, +#define PT_ATTACH PTRACE_ATTACH + + /* Detach from a process attached to with PTRACE_ATTACH. */ + PTRACE_DETACH = 17, +#define PT_DETACH PTRACE_DETACH + + PTRACE_GET_THREAD_AREA = 22, + + /* Continue and stop at the next (return from) syscall. */ + PTRACE_SYSCALL = 24, +#define PT_SYSCALL PTRACE_SYSCALL + + /* Get all hardware breakpoint registers. */ + PTRACE_GETHBPREGS = 29, + + /* Set all hardware breakpoint registers. */ + PTRACE_SETHBPREGS = 30, + + /* Set ptrace filter options. */ + PTRACE_SETOPTIONS = 0x4200, +#define PT_SETOPTIONS PTRACE_SETOPTIONS + + /* Get last ptrace message. */ + PTRACE_GETEVENTMSG = 0x4201, +#define PT_GETEVENTMSG PTRACE_GETEVENTMSG + + /* Get siginfo for process. */ + PTRACE_GETSIGINFO = 0x4202, +#define PT_GETSIGINFO PTRACE_GETSIGINFO + + /* Set new siginfo for process. */ + PTRACE_SETSIGINFO = 0x4203, +#define PT_SETSIGINFO PTRACE_SETSIGINFO + + /* Get register content. */ + PTRACE_GETREGSET = 0x4204, +#define PTRACE_GETREGSET PTRACE_GETREGSET + + /* Set register content. */ + PTRACE_SETREGSET = 0x4205, +#define PTRACE_SETREGSET PTRACE_SETREGSET + + /* Like PTRACE_ATTACH, but do not force tracee to trap and do not affect + signal or group stop state. */ + PTRACE_SEIZE = 0x4206, +#define PTRACE_SEIZE PTRACE_SEIZE + + /* Trap seized trace. */ + PTRACE_INTERRUPT = 0x4207, +#define PTRACE_INTERRUPT PTRACE_INTERRUPT + + /* Wait for next group event. */ + PTRACE_LISTEN = 0x4208, +#define PTRACE_LISTEN PTRACE_LISTEN + + PTRACE_PEEKSIGINFO = 0x4209 +#define PTRACE_PEEKSIGINFO PTRACE_PEEKSIGINFO +}; + + +/* Flag for PTRACE_LISTEN. */ +enum __ptrace_flags +{ + PTRACE_SEIZE_DEVEL = 0x80000000 +}; + +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions +{ + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_TRACESECCOMP = 0x00000080, + PTRACE_O_MASK = 0x000000ff +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes +{ + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6, + PTRACE_EVENT_SECCOMP = 7 +}; + +/* Arguments for PTRACE_PEEKSIGINFO. */ +struct __ptrace_peeksiginfo_args +{ + __uint64_t off; /* From which siginfo to start. */ + __uint32_t flags; /* Flags for peeksiginfo. */ + __int32_t nr; /* How many siginfos to take. */ +}; + +enum __ptrace_peeksiginfo_flags +{ + /* Read signals from a shared (process wide) queue. */ + PTRACE_PEEKSIGINFO_SHARED = (1 << 0) +}; + +/* Perform process tracing functions. REQUEST is one of the values + above, and determines the action to be taken. + For all requests except PTRACE_TRACEME, PID specifies the process to be + traced. + + PID and the other arguments described above for the various requests should + appear (those that are used for the particular request) as: + pid_t PID, void *ADDR, int DATA, void *ADDR2 + after REQUEST. */ +extern long int ptrace (enum __ptrace_request __request, ...) __THROW; + +__END_DECLS + +#endif /* _SYS_PTRACE_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h new file mode 100644 index 0000000000..476f5debbf --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h @@ -0,0 +1,56 @@ +/* Copyright (C) 1998-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/>. */ + +/* System V/AArch64 ABI compliant context switching support. */ + +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include <features.h> +#include <signal.h> +#include <sys/procfs.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; + +/* Container for all general registers. */ +typedef elf_gregset_t gregset_t; + +/* Structure to describe FPU registers. */ +typedef elf_fpregset_t fpregset_t; + +/* Context to describe whole processor state. This only describes + the core registers; coprocessor registers get saved elsewhere + (e.g. in uc_regspace, or somewhere unspecified on the stack + during non-RT signal handlers). */ +typedef struct sigcontext mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext + { + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + __sigset_t uc_sigmask; + mcontext_t uc_mcontext; + } ucontext_t; + +#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/user.h b/sysdeps/unix/sysv/linux/aarch64/sys/user.h new file mode 100644 index 0000000000..eceeb389e4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sys/user.h @@ -0,0 +1,31 @@ +/* Copyright (C) 2009-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/>. */ + +#ifndef _SYS_USER_H +#define _SYS_USER_H 1 + +/* We need to see the definition of struct pt_regs but do not want the + linux PTRACE_* defines since they conflict with the generic glibc + definitions in sys/ptrace.h Hence the undef's below. */ +#include <asm/ptrace.h> + +#undef PTRACE_GET_THREAD_AREA +#undef PTRACE_GETHBPREGS +#undef PTRACE_SETHBPREGS + +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/syscall.S b/sysdeps/unix/sysv/linux/aarch64/syscall.S new file mode 100644 index 0000000000..20dd6904a9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/syscall.S @@ -0,0 +1,44 @@ +/* Copyright (C) 2005-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 <sysdep.h> + +/* syscall (int nr, ...) + + AArch64 system calls take between 0 and 7 arguments. On entry here nr + is in w0 and any other system call arguments are in register x1..x7. + + For kernel entry we need to move the system call nr to x8 then + load the remaining arguments to register. */ + +ENTRY (syscall) + uxtw x8, w0 + mov x0, x1 + mov x1, x2 + mov x2, x3 + mov x3, x4 + mov x4, x5 + mov x5, x6 + mov x6, x7 + svc 0x0 + cmn x0, #4095 + b.cs 1f + RET +1: + b SYSCALL_ERROR +PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.c b/sysdeps/unix/sysv/linux/aarch64/sysdep.c new file mode 100644 index 0000000000..bfb87c5d4f --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.c @@ -0,0 +1,33 @@ +/* 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 <sysdep.h> +#include <errno.h> + +long __syscall_error (long err); +hidden_proto (__syscall_error) + +/* This routine is jumped to by all the syscall handlers, to stash + an error number into errno. */ +long +__syscall_error (long err) +{ + __set_errno (- err); + return -1; +} +hidden_def (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h new file mode 100644 index 0000000000..5ccf1da18b --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h @@ -0,0 +1,414 @@ +/* Copyright (C) 2005-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/>. */ + +#ifndef _LINUX_AARCH64_SYSDEP_H +#define _LINUX_AARCH64_SYSDEP_H 1 + +#include <sysdeps/unix/sysdep.h> +#include <sysdeps/aarch64/sysdep.h> +#include <sysdeps/unix/sysv/linux/generic/sysdep.h> + +/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ +#include <dl-sysdep.h> + +#include <tls.h> + +/* In order to get __set_errno() definition in INLINE_SYSCALL. */ +#ifndef __ASSEMBLER__ +#include <errno.h> +#endif + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +#undef SYS_ify +#define SYS_ify(syscall_name) (__NR_##syscall_name) + +#ifdef __ASSEMBLER__ + +/* Linux uses a negative return value to indicate syscall errors, + unlike most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be + negative even if the call succeeded. E.g., the `lseek' system call + might return a large offset. Therefore we must not anymore test + for < 0, but test for a real error by making sure the value in R0 + is a real error number. Linus said he will make sure the no syscall + returns a value in -1 .. -4095 as a valid result so we can safely + test with -4095. */ + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name); \ + DO_CALL (syscall_name, args); \ + cmn x0, #4095; + +/* Notice the use of 'RET' instead of 'ret' the assembler is case + insensitive and eglibc already uses the preprocessor symbol 'ret' + so we use the upper case 'RET' to force through a ret instruction + to the assembler */ +# define PSEUDO_RET \ + b.cs 1f; \ + RET; \ + 1: \ + b SYSCALL_ERROR +# undef ret +# define ret PSEUDO_RET + +# undef PSEUDO_END +# define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER \ + END (name) + +# undef PSEUDO_NOERRNO +# define PSEUDO_NOERRNO(name, syscall_name, args) \ + .text; \ + ENTRY (name); \ + DO_CALL (syscall_name, args); + +/* Notice the use of 'RET' instead of 'ret' the assembler is case + insensitive and eglibc already uses the preprocessor symbol 'ret' + so we use the upper case 'RET' to force through a ret instruction + to the assembler */ +# define PSEUDO_RET_NOERRNO \ + RET; + +# undef ret_NOERRNO +# define ret_NOERRNO PSEUDO_RET_NOERRNO + +# undef PSEUDO_END_NOERRNO +# define PSEUDO_END_NOERRNO(name) \ + END (name) + +/* The function has to return the error code. */ +# undef PSEUDO_ERRVAL +# define PSEUDO_ERRVAL(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (syscall_name, args); \ + neg x0, x0 + +# undef PSEUDO_END_ERRVAL +# define PSEUDO_END_ERRVAL(name) \ + END (name) + +# define ret_ERRVAL PSEUDO_RET_NOERRNO + +# if NOT_IN_libc +# define SYSCALL_ERROR __local_syscall_error +# if RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_HANDLER \ +__local_syscall_error: \ + adrp x1, C_SYMBOL_NAME(rtld_errno); \ + add x1, x1, #:lo12:C_SYMBOL_NAME(rtld_errno); \ + neg w0, w0; \ + str w0, [x1]; \ + mov x0, -1; \ + RET; +# else + +# define SYSCALL_ERROR_HANDLER \ +__local_syscall_error: \ + stp x29, x30, [sp, -32]!; \ + cfi_adjust_cfa_offset (32); \ + cfi_rel_offset (x29, 0); \ + cfi_rel_offset (x30, 8); \ + add x29, sp, 0; \ + str x19, [sp,16]; \ + neg x19, x0; \ + bl C_SYMBOL_NAME(__errno_location); \ + str w19, [x0]; \ + mov x0, -1; \ + ldr x19, [sp,16]; \ + ldp x29, x30, [sp], 32; \ + cfi_adjust_cfa_offset (-32); \ + cfi_restore (x29); \ + cfi_restore (x30); \ + RET; +# endif +# else +# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ +# define SYSCALL_ERROR __syscall_error +# endif + +/* Linux takes system call args in registers: + syscall number in the SVC instruction + arg 1 x0 + arg 2 x1 + arg 3 x2 + arg 4 x3 + arg 5 x4 + arg 6 x5 + arg 7 x6 + + The compiler is going to form a call by coming here, through PSEUDO, with + arguments + syscall number in the DO_CALL macro + arg 1 x0 + arg 2 x1 + arg 3 x2 + arg 4 x3 + arg 5 x4 + arg 6 x5 + arg 7 x6 + + We need to shuffle values between R4..R6 and the stack so that the + caller's v1..v3 and stack frame are not corrupted, and the kernel + sees the right arguments. + +*/ + +# undef DO_CALL +# define DO_CALL(syscall_name, args) \ + DOARGS_##args \ + mov x8, SYS_ify (syscall_name); \ + svc 0; \ + UNDOARGS_##args + +# define DOARGS_0 /* nothing */ +# define DOARGS_1 /* nothing */ +# define DOARGS_2 /* nothing */ +# define DOARGS_3 /* nothing */ +# define DOARGS_4 /* nothing */ +# define DOARGS_5 /* nothing */ +# define DOARGS_6 /* nothing */ +# define DOARGS_7 /* nothing */ + +# define UNDOARGS_0 /* nothing */ +# define UNDOARGS_1 /* nothing */ +# define UNDOARGS_2 /* nothing */ +# define UNDOARGS_3 /* nothing */ +# define UNDOARGS_4 /* nothing */ +# define UNDOARGS_5 /* nothing */ +# define UNDOARGS_6 /* nothing */ +# define UNDOARGS_7 /* nothing */ + +#else /* not __ASSEMBLER__ */ + +# ifdef SHARED +# define INLINE_VSYSCALL(name, nr, args...) \ + ({ \ + __label__ out; \ + __label__ iserr; \ + long sc_ret; \ + INTERNAL_SYSCALL_DECL (sc_err); \ + \ + if (__vdso_##name != NULL) \ + { \ + sc_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, sc_err, nr, ##args); \ + if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + goto out; \ + if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ + goto iserr; \ + } \ + \ + sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ + if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + { \ + iserr: \ + __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ + sc_ret = -1L; \ + } \ + out: \ + sc_ret; \ + }) +# else +# define INLINE_VSYSCALL(name, nr, args...) \ + INLINE_SYSCALL (name, nr, ##args) +# endif + +# ifdef SHARED +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + ({ \ + __label__ out; \ + long v_ret; \ + \ + if (__vdso_##name != NULL) \ + { \ + v_ret = INTERNAL_VSYSCALL_NCS (__vdso_##name, err, nr, ##args); \ + if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ + || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ + goto out; \ + } \ + v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ + out: \ + v_ret; \ + }) +# else +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + INTERNAL_SYSCALL (name, err, nr, ##args) +# endif + +/* List of system calls which are supported as vsyscalls. */ +# define HAVE_CLOCK_GETRES_VSYSCALL 1 +# define HAVE_CLOCK_GETTIME_VSYSCALL 1 + +# define INTERNAL_VSYSCALL_NCS(funcptr, err, nr, args...) \ + ({ \ + LOAD_ARGS_##nr (args) \ + asm volatile ("blr %1" \ + : "=r" (_x0) \ + : "r" (funcptr), ASM_ARGS_##nr \ + : "x30", "memory"); \ + (long) _x0; \ + }) + + +/* Define a macro which expands into the inline wrapper code for a system + call. */ +# undef INLINE_SYSCALL +# define INLINE_SYSCALL(name, nr, args...) \ + ({ unsigned long _sys_result = INTERNAL_SYSCALL (name, , nr, args); \ + if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0))\ + { \ + __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \ + _sys_result = (unsigned long) -1; \ + } \ + (long) _sys_result; }) + +# undef INTERNAL_SYSCALL_DECL +# define INTERNAL_SYSCALL_DECL(err) do { } while (0) + +# undef INTERNAL_SYSCALL_RAW +# define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \ + ({ unsigned long _sys_result; \ + { \ + LOAD_ARGS_##nr (args) \ + register long _x8 asm ("x8") = (name); \ + asm volatile ("svc 0 // syscall " # name \ + : "+r" (_x0), "+r" (_x8) \ + : ASM_ARGS_##nr \ + : "memory", CLOBBER_ARGS_##nr); \ + _sys_result = _x0; \ + } \ + (long) _sys_result; }) + +# undef INTERNAL_SYSCALL +# define INTERNAL_SYSCALL(name, err, nr, args...) \ + INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args) + +# undef INTERNAL_SYSCALL_AARCH64 +# define INTERNAL_SYSCALL_AARCH64(name, err, nr, args...) \ + INTERNAL_SYSCALL_RAW(__ARM_NR_##name, err, nr, args) + +# undef INTERNAL_SYSCALL_ERROR_P +# define INTERNAL_SYSCALL_ERROR_P(val, err) \ + ((unsigned long) (val) >= (unsigned long) -4095) + +# undef INTERNAL_SYSCALL_ERRNO +# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) + +# define CLOBBER_ARGS_0 CLOBBER_ARGS_1 +# define CLOBBER_ARGS_1 "x1", CLOBBER_ARGS_2 +# define CLOBBER_ARGS_2 "x2", CLOBBER_ARGS_3 +# define CLOBBER_ARGS_3 "x3", CLOBBER_ARGS_4 +# define CLOBBER_ARGS_4 "x4", CLOBBER_ARGS_5 +# define CLOBBER_ARGS_5 "x5", CLOBBER_ARGS_6 +# define CLOBBER_ARGS_6 "x6", CLOBBER_ARGS_7 +# define CLOBBER_ARGS_7 \ + "x7", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", "x18" + +# define LOAD_ARGS_0() \ + register long _x0 asm ("x0"); + +# define ASM_ARGS_0 +# define LOAD_ARGS_1(x0) \ + long _x0tmp = (long) (x0); \ + LOAD_ARGS_0 () \ + _x0 = _x0tmp; +# define ASM_ARGS_1 "r" (_x0) +# define LOAD_ARGS_2(x0, x1) \ + long _x1tmp = (long) (x1); \ + LOAD_ARGS_1 (x0) \ + register long _x1 asm ("x1") = _x1tmp; +# define ASM_ARGS_2 ASM_ARGS_1, "r" (_x1) +# define LOAD_ARGS_3(x0, x1, x2) \ + long _x2tmp = (long) (x2); \ + LOAD_ARGS_2 (x0, x1) \ + register long _x2 asm ("x2") = _x2tmp; +# define ASM_ARGS_3 ASM_ARGS_2, "r" (_x2) +# define LOAD_ARGS_4(x0, x1, x2, x3) \ + long _x3tmp = (long) (x3); \ + LOAD_ARGS_3 (x0, x1, x2) \ + register long _x3 asm ("x3") = _x3tmp; +# define ASM_ARGS_4 ASM_ARGS_3, "r" (_x3) +# define LOAD_ARGS_5(x0, x1, x2, x3, x4) \ + long _x4tmp = (long) (x4); \ + LOAD_ARGS_4 (x0, x1, x2, x3) \ + register long _x4 asm ("x4") = _x4tmp; +# define ASM_ARGS_5 ASM_ARGS_4, "r" (_x4) +# define LOAD_ARGS_6(x0, x1, x2, x3, x4, x5) \ + long _x5tmp = (long) (x5); \ + LOAD_ARGS_5 (x0, x1, x2, x3, x4) \ + register long _x5 asm ("x5") = _x5tmp; +# define ASM_ARGS_6 ASM_ARGS_5, "r" (_x5) +# define LOAD_ARGS_7(x0, x1, x2, x3, x4, x5, x6)\ + long _x6tmp = (long) (x6); \ + LOAD_ARGS_6 (x0, x1, x2, x3, x4, x5) \ + register long _x6 asm ("x6") = _x6tmp; +# define ASM_ARGS_7 ASM_ARGS_6, "r" (_x6) + +# undef INTERNAL_SYSCALL_NCS +# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \ + INTERNAL_SYSCALL_RAW (number, err, nr, args) + +#endif /* __ASSEMBLER__ */ + +/* Pointer mangling is supported for AArch64. */ +#if (defined NOT_IN_libc && defined IS_IN_rtld) || \ + (!defined SHARED && (!defined NOT_IN_libc || defined IS_IN_libpthread)) +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(dst, src, guard, tmp) \ + LDST_PCREL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); \ + PTR_MANGLE2 (dst, src, guard) +/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ +# define PTR_MANGLE2(dst, src, guard)\ + eor dst, src, guard +# define PTR_DEMANGLE(dst, src, guard, tmp)\ + PTR_MANGLE (dst, src, guard, tmp) +# define PTR_DEMANGLE2(dst, src, guard)\ + PTR_MANGLE2 (dst, src, guard) +# else +extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden; +# define PTR_MANGLE(var) \ + (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(dst, src, guard, tmp) \ + LDST_GLOBAL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard)); \ + PTR_MANGLE2 (dst, src, guard) +/* Use PTR_MANGLE2 for efficiency if guard is already loaded. */ +# define PTR_MANGLE2(dst, src, guard)\ + eor dst, src, guard +# define PTR_DEMANGLE(dst, src, guard, tmp)\ + PTR_MANGLE (dst, src, guard, tmp) +# define PTR_DEMANGLE2(dst, src, guard)\ + PTR_MANGLE2 (dst, src, guard) +# else +extern uintptr_t __pointer_chk_guard attribute_relro; +# define PTR_MANGLE(var) \ + (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + +#endif /* linux/aarch64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h b/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h new file mode 100644 index 0000000000..8b58114dec --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ucontext-internal.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2009-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/>. */ + +#define SP_ALIGN_SIZE 15 + +#define SP_ALIGN_MASK ~15 + +/* Size of an X regiser in bytes. */ +#define SZREG 8 + +/* Size of a V register in bytes. */ +#define SZVREG 16 + +/* Number of integer parameter passing registers. */ +#define NUMXREGARGS 8 + +/* Number of FP parameter passing registers. */ +#define NUMDREGARGS 8 + +/* Size of named integer argument in bytes when passed on the + stack. */ +#define SIZEOF_NAMED_INT 4 + +/* Size of an anonymous integer argument in bytes when passed on the + stack. */ +#define SIZEOF_ANONYMOUS_INT 8 + +#define oX21 (oX0 + 21*8) +#define oFP (oX0 + 29*8) +#define oLR (oX0 + 30*8) diff --git a/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym b/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym new file mode 100644 index 0000000000..ab3930c173 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym @@ -0,0 +1,55 @@ +#include <inttypes.h> +#include <signal.h> +#include <stddef.h> +#include <sys/ucontext.h> +#include <asm/sigcontext.h> + +#include "kernel_rt_sigframe.h" + +SIG_BLOCK +SIG_SETMASK + +_NSIG8 (_NSIG / 8) + +-- Offsets of the fields in the kernel rt_sigframe_t structure. +#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member) + +RT_SIGFRAME_UCONTEXT rt_sigframe (uc) + +RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe) +FPSIMD_CONTEXT_SIZE sizeof (struct fpsimd_context) + +#define ucontext(member) offsetof (ucontext_t, member) +#define stack(member) ucontext (uc_stack.member) +#define mcontext(member) ucontext (uc_mcontext.member) + +UCONTEXT_FLAGS ucontext (uc_flags) +UCONTEXT_LINK ucontext (uc_link) +UCONTEXT_STACK ucontext (uc_stack) +UCONTEXT_MCONTEXT ucontext (uc_mcontext) +UCONTEXT_SIGMASK ucontext (uc_sigmask) +UCONTEXT_SIZE sizeof (ucontext_t) + +STACK_SP stack (ss_sp) +STACK_SIZE stack (ss_size) +STACK_FLAGS stack (ss_flags) + +oX0 mcontext (regs) +oSP mcontext (sp) +oPC mcontext (pc) +oPSTATE mcontext (pstate) +oEXTENSION mcontext (__reserved) + +#define fpsimd_context(member) offsetof (struct fpsimd_context, member) + +oHEAD fpsimd_context (head) +oV0 fpsimd_context (vregs) +oFPSR fpsimd_context (fpsr) +oFPCR fpsimd_context (fpcr) + +#define aarch64_ctx(member) offsetof (struct _aarch64_ctx, member) + +oMAGIC aarch64_ctx (magic) +oSIZE aarch64_ctx (size) + +FPSIMD_MAGIC diff --git a/sysdeps/unix/sysv/linux/aarch64/vfork.S b/sysdeps/unix/sysv/linux/aarch64/vfork.S new file mode 100644 index 0000000000..d9f2c70748 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/vfork.S @@ -0,0 +1,49 @@ +/* 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/>. */ + +#include <sysdep.h> +#define _ERRNO_H 1 +#include <bits/errno.h> +#include <kernel-features.h> + +/* Clone the calling process, but without copying the whole address space. + The calling process is suspended until the new process exits or is + replaced by a call to `execve'. Return -1 for errors, 0 to the new process, + and the process ID of the new process to the old process. */ + +ENTRY (__vfork) + +#ifdef SAVE_PID + SAVE_PID +#endif + mov x0, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ + mov x1, sp + DO_CALL (clone, 2) +#ifdef RESTORE_PID + RESTORE_PID +#endif + cmn x0, #4095 + b.cs 1f + RET +1: + b SYSCALL_ERROR + +PSEUDO_END (__vfork) +libc_hidden_def (__vfork) + +weak_alias (__vfork, vfork) |