summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2024-01-08 08:47:43 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2024-01-08 08:47:43 +0100
commit73f41daa09760389db8ac1cc66ec2c28097eedcd (patch)
treeeb1b0e2fb9527c8a8aeb2e09f681939a641000c4
parent449fb17cc884a21f65f24bb01d2a162c3dbcc5fc (diff)
glibc: add ARCv3 support patch from buildroot
-rw-r--r--toolchain/glibc/patches/2.38/0004-ARC-Add-support-for-ARCv3-processors.patch4036
1 files changed, 4036 insertions, 0 deletions
diff --git a/toolchain/glibc/patches/2.38/0004-ARC-Add-support-for-ARCv3-processors.patch b/toolchain/glibc/patches/2.38/0004-ARC-Add-support-for-ARCv3-processors.patch
new file mode 100644
index 000000000..cf4ca7352
--- /dev/null
+++ b/toolchain/glibc/patches/2.38/0004-ARC-Add-support-for-ARCv3-processors.patch
@@ -0,0 +1,4036 @@
+From ac6163148698545dd56471edabf97ffc23a519da Mon Sep 17 00:00:00 2001
+From: Alexey Brodkin <abrodkin@synopsys.com>
+Date: Tue, 2 Jan 2024 03:38:32 -0800
+Subject: [PATCH] ARC: Add support for ARCv3 processors
+
+Signed-off-by: Vineet Gupta <vgupta@kernel.org>
+Signed-off-by: Pavel Kozlov <pavel.kozlov@synopsys.com>
+Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
+---
+ config.h.in | 6 +
+ elf/dl-runtime.c | 4 +-
+ elf/elf.h | 5 +-
+ nptl/Makefile | 5 +-
+ scripts/build-many-glibcs.py | 6 +
+ scripts/config.sub | 8 +
+ sysdeps/arc/Implies | 1 -
+ sysdeps/arc/__longjmp.S | 62 +-
+ sysdeps/arc/arc32/Implies | 1 +
+ sysdeps/arc/arc64/Implies | 1 +
+ sysdeps/arc/arc64/fpu/libm-test-ulps | 1141 +++++++++++++++++
+ sysdeps/arc/arc64/fpu/libm-test-ulps-name | 1 +
+ sysdeps/arc/{ => arc64}/nofpu/libm-test-ulps | 1 +
+ sysdeps/arc/arc64/nofpu/libm-test-ulps-name | 1 +
+ sysdeps/arc/atomic-machine.h | 41 +-
+ sysdeps/arc/bits/setjmp.h | 6 +-
+ sysdeps/arc/configure | 80 +-
+ sysdeps/arc/configure.ac | 36 +
+ sysdeps/arc/dl-machine.h | 75 +-
+ sysdeps/arc/dl-trampoline.S | 89 +-
+ sysdeps/arc/fpu/math-use-builtins-fma.h | 18 +-
+ sysdeps/arc/fpu/math-use-builtins-sqrt.h | 18 +-
+ sysdeps/arc/isa-asm-macro-32.h | 61 +
+ sysdeps/arc/isa-asm-macro-64.h | 86 ++
+ sysdeps/arc/isa-asm-macros.h | 35 +
+ sysdeps/arc/nofpu/libm-test-ulps | 1 +
+ sysdeps/arc/nptl/pthreaddef.h | 2 +-
+ sysdeps/arc/preconfigure | 18 +-
+ sysdeps/arc/setjmp.S | 55 +-
+ sysdeps/arc/sfp-machine.h | 55 +-
+ sysdeps/arc/start.S | 14 +-
+ sysdeps/arc/sysdep.h | 5 +-
+ sysdeps/unix/sysv/linux/arc/Makefile | 8 +-
+ sysdeps/unix/sysv/linux/arc/arc32/Implies | 1 +
+ .../sysv/linux/arc/{ => arc32}/arch-syscall.h | 0
+ .../sysv/linux/arc/{ => arc32}/c++-types.data | 0
+ .../linux/arc/{ => arc32}/fixup-asm-unistd.h | 0
+ .../sysv/linux/arc/{ => arc32}/ld.abilist | 0
+ .../arc/{ => arc32}/libBrokenLocale.abilist | 0
+ .../sysv/linux/arc/{ => arc32}/libanl.abilist | 0
+ .../sysv/linux/arc/{ => arc32}/libc.abilist | 0
+ .../arc/{ => arc32}/libc_malloc_debug.abilist | 0
+ .../linux/arc/{ => arc32}/libcrypt.abilist | 0
+ .../sysv/linux/arc/{ => arc32}/libdl.abilist | 0
+ .../sysv/linux/arc/{ => arc32}/libm.abilist | 0
+ .../linux/arc/{ => arc32}/libpthread.abilist | 0
+ .../linux/arc/{ => arc32}/libresolv.abilist | 0
+ .../sysv/linux/arc/{ => arc32}/librt.abilist | 0
+ .../arc/{ => arc32}/libthread_db.abilist | 0
+ .../linux/arc/{ => arc32}/libutil.abilist | 0
+ sysdeps/unix/sysv/linux/arc/arc64/Implies | 2 +
+ .../sysv/linux/arc/{ => arc64}/arch-syscall.h | 59 +-
+ .../sysv/linux/arc/{ => arc64}/c++-types.data | 48 +-
+ .../sysv/linux/arc/{ => arc64}/ld.abilist | 8 +-
+ .../arc/{ => arc64}/libBrokenLocale.abilist | 0
+ .../sysv/linux/arc/{ => arc64}/libanl.abilist | 0
+ .../sysv/linux/arc/{ => arc64}/libc.abilist | 82 +-
+ .../arc/{ => arc64}/libc_malloc_debug.abilist | 8 +-
+ .../linux/arc/{ => arc64}/libcrypt.abilist | 0
+ .../sysv/linux/arc/{ => arc64}/libdl.abilist | 0
+ .../sysv/linux/arc/{ => arc64}/libm.abilist | 0
+ .../linux/arc/{ => arc64}/libpthread.abilist | 0
+ .../linux/arc/{ => arc64}/libresolv.abilist | 4 +-
+ .../sysv/linux/arc/{ => arc64}/librt.abilist | 0
+ .../arc/{ => arc64}/libthread_db.abilist | 0
+ .../linux/arc/{ => arc64}/libutil.abilist | 0
+ sysdeps/unix/sysv/linux/arc/bits/fcntl.h | 62 +
+ .../sysv/linux/arc/bits/types/__sigset_t.h | 2 +-
+ sysdeps/unix/sysv/linux/arc/clone.S | 30 +-
+ sysdeps/unix/sysv/linux/arc/clone3.S | 14 +-
+ sysdeps/unix/sysv/linux/arc/getcontext.S | 71 +-
+ sysdeps/unix/sysv/linux/arc/setcontext.S | 88 +-
+ sysdeps/unix/sysv/linux/arc/shlib-versions | 8 +
+ sysdeps/unix/sysv/linux/arc/swapcontext.S | 129 +-
+ sysdeps/unix/sysv/linux/arc/sys/ucontext.h | 1 +
+ sysdeps/unix/sysv/linux/arc/syscall.S | 16 +-
+ sysdeps/unix/sysv/linux/arc/sysdep.h | 16 +-
+ sysdeps/unix/sysv/linux/arc/vfork.S | 4 +-
+ timezone/zic.c | 2 +-
+ 79 files changed, 2211 insertions(+), 390 deletions(-)
+ mode change 100755 => 100644 scripts/config.sub
+ create mode 100644 sysdeps/arc/arc32/Implies
+ create mode 100644 sysdeps/arc/arc64/Implies
+ create mode 100644 sysdeps/arc/arc64/fpu/libm-test-ulps
+ create mode 100644 sysdeps/arc/arc64/fpu/libm-test-ulps-name
+ copy sysdeps/arc/{ => arc64}/nofpu/libm-test-ulps (99%)
+ create mode 100644 sysdeps/arc/arc64/nofpu/libm-test-ulps-name
+ create mode 100644 sysdeps/arc/isa-asm-macro-32.h
+ create mode 100644 sysdeps/arc/isa-asm-macro-64.h
+ create mode 100644 sysdeps/arc/isa-asm-macros.h
+ create mode 100644 sysdeps/unix/sysv/linux/arc/arc32/Implies
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/arch-syscall.h (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/c++-types.data (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc32}/fixup-asm-unistd.h (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/ld.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libBrokenLocale.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libanl.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libc.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libc_malloc_debug.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libcrypt.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libdl.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libm.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libpthread.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libresolv.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/librt.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libthread_db.abilist (100%)
+ copy sysdeps/unix/sysv/linux/arc/{ => arc32}/libutil.abilist (100%)
+ create mode 100644 sysdeps/unix/sysv/linux/arc/arc64/Implies
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/arch-syscall.h (89%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/c++-types.data (73%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/ld.abilist (54%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libBrokenLocale.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libanl.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libc.abilist (97%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libc_malloc_debug.abilist (80%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libcrypt.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libdl.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libm.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libpthread.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libresolv.abilist (95%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/librt.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libthread_db.abilist (100%)
+ rename sysdeps/unix/sysv/linux/arc/{ => arc64}/libutil.abilist (100%)
+ create mode 100644 sysdeps/unix/sysv/linux/arc/bits/fcntl.h
+
+diff --git a/config.h.in b/config.h.in
+index 0dedc124f7..d69b4166c0 100644
+--- a/config.h.in
++++ b/config.h.in
+@@ -120,6 +120,12 @@
+ /* ARC big endian ABI */
+ #undef HAVE_ARC_BE
+
++/* ARC64:32 ABI */
++#undef HAVE_ARC32
++
++/* ARC64:64 ABI */
++#undef HAVE_ARC64
++
+ /* C-SKY ABI version. */
+ #undef CSKYABI
+
+diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
+index 32a8bfcf74..68ffdb1c24 100644
+--- a/elf/dl-runtime.c
++++ b/elf/dl-runtime.c
+@@ -42,7 +42,7 @@ _dl_fixup (
+ # ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
+ # endif
+- struct link_map *l, ElfW(Word) reloc_arg)
++ struct link_map *l, uintptr_t reloc_arg)
+ {
+ const ElfW(Sym) *const symtab
+ = (const void *) D_PTR (l, l_info[DT_SYMTAB]);
+@@ -170,7 +170,7 @@ _dl_profile_fixup (
+ #ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
+ ELF_MACHINE_RUNTIME_FIXUP_ARGS,
+ #endif
+- struct link_map *l, ElfW(Word) reloc_arg,
++ struct link_map *l, uintptr_t reloc_arg,
+ ElfW(Addr) retaddr, void *regs, long int *framesizep)
+ {
+ void (*mcount_fct) (ElfW(Addr), ElfW(Addr)) = _dl_mcount;
+diff --git a/elf/elf.h b/elf/elf.h
+index 89fc8021e9..05cc75c631 100644
+--- a/elf/elf.h
++++ b/elf/elf.h
+@@ -358,6 +358,8 @@ typedef struct
+
+ #define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */
+ #define EM_CSKY 252 /* C-SKY */
++#define EM_ARCV3 253 /* Synopsys ARCv3 64-bit ISA */
++#define EM_ARCV3_32 255 /* Synopsys ARCv3 32-bit ISA */
+ #define EM_LOONGARCH 258 /* LoongArch */
+
+ #define EM_NUM 259
+@@ -4216,12 +4218,13 @@ enum
+ /* Processor specific values for the Shdr sh_type field. */
+ #define SHT_ARC_ATTRIBUTES (SHT_LOPROC + 1) /* ARC attributes section. */
+
+-/* ARCompact/ARCv2 specific relocs. */
++/* ARCompact/ARCv2/ARCv3 specific relocs. */
+ #define R_ARC_NONE 0x0
+ #define R_ARC_8 0x1
+ #define R_ARC_16 0x2
+ #define R_ARC_24 0x3
+ #define R_ARC_32 0x4
++#define R_ARC_64 0x5
+
+ #define R_ARC_B22_PCREL 0x6
+ #define R_ARC_H30 0x7
+diff --git a/nptl/Makefile b/nptl/Makefile
+index ffa5722e48..c8b7674c27 100644
+--- a/nptl/Makefile
++++ b/nptl/Makefile
+@@ -353,6 +353,7 @@ tests = \
+ tst-thread-exit-clobber \
+ tst-thread-setspecific \
+ tst-thread_local1 \
++ tst-eintr1 \
+ tst-tsd3 \
+ tst-tsd4 \
+ # tests
+@@ -397,10 +398,6 @@ tests-time64 := \
+ tst-cancel4_2-time64
+ # tests-time64
+
+-# This test can run into task limits because of a linux kernel bug
+-# and then cause the make process to fail too, see bug 24537.
+-xtests += tst-eintr1
+-
+ test-srcs = tst-oddstacklimit
+
+ gen-as-const-headers = unwindbuf.sym
+diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
+index 73ffc57c86..6f53c195cd 100755
+--- a/scripts/build-many-glibcs.py
++++ b/scripts/build-many-glibcs.py
+@@ -172,6 +172,12 @@ class Context(object):
+ self.add_config(arch='arceb',
+ os_name='linux-gnu',
+ gcc_cfg=['--disable-multilib', '--with-cpu=hs38'])
++ self.add_config(arch='arc64',
++ os_name='linux-gnu',
++ gcc_cfg=['--disable-multilib'])
++ self.add_config(arch='arc64',
++ os_name='linux-gnuhf',
++ gcc_cfg=['--disable-multilib', '--with-fpu=fpud'])
+ self.add_config(arch='alpha',
+ os_name='linux-gnu')
+ self.add_config(arch='arm',
+diff --git a/scripts/config.sub b/scripts/config.sub
+old mode 100755
+new mode 100644
+index dba16e84c7..4d9a117c9c
+--- a/scripts/config.sub
++++ b/scripts/config.sub
+@@ -1170,6 +1170,14 @@ case $cpu-$vendor in
+ cpu=mipsallegrexel
+ vendor=sony
+ ;;
++ arc32*-*)
++ cpu=arc32
++ vendor=linux
++ ;;
++ arc64*-*)
++ cpu=arc64
++ vendor=linux
++ ;;
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
+ ;;
+diff --git a/sysdeps/arc/Implies b/sysdeps/arc/Implies
+index 780c4e2467..12ca48b4c9 100644
+--- a/sysdeps/arc/Implies
++++ b/sysdeps/arc/Implies
+@@ -1,3 +1,2 @@
+-wordsize-32
+ ieee754/flt-32
+ ieee754/dbl-64
+diff --git a/sysdeps/arc/__longjmp.S b/sysdeps/arc/__longjmp.S
+index a57054bce0..920e535ffd 100644
+--- a/sysdeps/arc/__longjmp.S
++++ b/sysdeps/arc/__longjmp.S
+@@ -24,25 +24,49 @@
+
+ ENTRY (__longjmp)
+
+- LDR (blink, r0, 0)
+- LDR (sp, r0, 1)
+- LDR (fp, r0, 2)
+- LDR (gp, r0, 3)
+-
+- LDR (r13, r0, 4)
+- LDR (r14, r0, 5)
+- LDR (r15, r0, 6)
+- LDR (r16, r0, 7)
+- LDR (r17, r0, 8)
+- LDR (r18, r0, 9)
+- LDR (r19, r0, 10)
+- LDR (r20, r0, 11)
+- LDR (r21, r0, 12)
+- LDR (r22, r0, 13)
+- LDR (r23, r0, 14)
+- LDR (r24, r0, 15)
+-
+- mov.f r0, r1
++ LDR.as blink, r0, 0
++ LDR.as sp, r0, 1
++ LDR.as fp, r0, 2
++ LDR.as gp, r0, 3
++
++ LDR.as r13, r0, 4
++ LDR.as r14, r0, 5
++ LDR.as r15, r0, 6
++ LDR.as r16, r0, 7
++ LDR.as r17, r0, 8
++ LDR.as r18, r0, 9
++ LDR.as r19, r0, 10
++ LDR.as r20, r0, 11
++ LDR.as r21, r0, 12
++ LDR.as r22, r0, 13
++ LDR.as r23, r0, 14
++ LDR.as r24, r0, 15
++
++#if defined(__ARCV3__)
++ LDR.as r25, r0, 16
++ LDR.as r26, r0, 17
++#endif
++
++#if defined (__ARC_FLOAT_ABI_HARD__)
++ FLDR.as f16, r0, 18
++ FLDR.as f17, r0, 19
++ FLDR.as f18, r0, 20
++ FLDR.as f19, r0, 21
++ FLDR.as f20, r0, 22
++ FLDR.as f21, r0, 23
++ FLDR.as f22, r0, 24
++ FLDR.as f23, r0, 25
++ FLDR.as f24, r0, 26
++ FLDR.as f25, r0, 27
++ FLDR.as f26, r0, 28
++ FLDR.as f27, r0, 29
++ FLDR.as f28, r0, 30
++ FLDR.as f29, r0, 31
++ FLDR.as f30, r0, 32
++ FLDR.as f31, r0, 33
++#endif
++
++ MOVR.f r0, r1
+ j.d [blink]
+ mov.z r0, 1 /* don't return 0 to setjmp callsite from longjmp. */
+
+diff --git a/sysdeps/arc/arc32/Implies b/sysdeps/arc/arc32/Implies
+new file mode 100644
+index 0000000000..39a34c5f57
+--- /dev/null
++++ b/sysdeps/arc/arc32/Implies
+@@ -0,0 +1 @@
++wordsize-32
+diff --git a/sysdeps/arc/arc64/Implies b/sysdeps/arc/arc64/Implies
+new file mode 100644
+index 0000000000..a8cae95f9d
+--- /dev/null
++++ b/sysdeps/arc/arc64/Implies
+@@ -0,0 +1 @@
++wordsize-64
+diff --git a/sysdeps/arc/arc64/fpu/libm-test-ulps b/sysdeps/arc/arc64/fpu/libm-test-ulps
+new file mode 100644
+index 0000000000..f3b8753c4d
+--- /dev/null
++++ b/sysdeps/arc/arc64/fpu/libm-test-ulps
+@@ -0,0 +1,1141 @@
++# Begin of automatic generation
++
++# Maximal error of functions:
++Function: "acos":
++double: 1
++float: 1
++
++Function: "acos_downward":
++double: 1
++float: 1
++
++Function: "acos_towardzero":
++double: 1
++float: 1
++
++Function: "acos_upward":
++double: 1
++float: 1
++
++Function: "acosh":
++double: 2
++float: 2
++
++Function: "acosh_downward":
++double: 2
++float: 2
++
++Function: "acosh_towardzero":
++double: 2
++float: 2
++
++Function: "acosh_upward":
++double: 2
++float: 2
++
++Function: "asin":
++double: 1
++float: 1
++
++Function: "asin_downward":
++double: 1
++float: 1
++
++Function: "asin_towardzero":
++double: 1
++float: 1
++
++Function: "asin_upward":
++double: 2
++float: 1
++
++Function: "asinh":
++double: 2
++float: 2
++
++Function: "asinh_downward":
++double: 3
++float: 3
++
++Function: "asinh_towardzero":
++double: 2
++float: 2
++
++Function: "asinh_upward":
++double: 3
++float: 3
++
++Function: "atan":
++double: 1
++float: 1
++
++Function: "atan2":
++float: 1
++
++Function: "atan2_downward":
++double: 1
++float: 2
++
++Function: "atan2_towardzero":
++double: 1
++float: 2
++
++Function: "atan2_upward":
++double: 1
++float: 1
++
++Function: "atan_downward":
++double: 1
++float: 2
++
++Function: "atan_towardzero":
++double: 1
++float: 1
++
++Function: "atan_upward":
++double: 1
++float: 2
++
++Function: "atanh":
++double: 2
++float: 2
++
++Function: "atanh_downward":
++double: 3
++float: 3
++
++Function: "atanh_towardzero":
++double: 2
++float: 2
++
++Function: "atanh_upward":
++double: 3
++float: 3
++
++Function: "cabs":
++double: 1
++
++Function: "cabs_downward":
++double: 1
++
++Function: "cabs_towardzero":
++double: 1
++
++Function: "cabs_upward":
++double: 1
++float: 1
++
++Function: Real part of "cacos":
++double: 1
++float: 2
++
++Function: Imaginary part of "cacos":
++double: 2
++float: 2
++
++Function: Real part of "cacos_downward":
++double: 3
++float: 2
++
++Function: Imaginary part of "cacos_downward":
++double: 5
++float: 3
++
++Function: Real part of "cacos_towardzero":
++double: 3
++float: 2
++
++Function: Imaginary part of "cacos_towardzero":
++double: 4
++float: 2
++
++Function: Real part of "cacos_upward":
++double: 2
++float: 2
++
++Function: Imaginary part of "cacos_upward":
++double: 5
++float: 5
++
++Function: Real part of "cacosh":
++double: 2
++float: 2
++
++Function: Imaginary part of "cacosh":
++double: 1
++float: 2
++
++Function: Real part of "cacosh_downward":
++double: 4
++float: 2
++
++Function: Imaginary part of "cacosh_downward":
++double: 3
++float: 3
++
++Function: Real part of "cacosh_towardzero":
++double: 4
++float: 2
++
++Function: Imaginary part of "cacosh_towardzero":
++double: 3
++float: 2
++
++Function: Real part of "cacosh_upward":
++double: 4
++float: 3
++
++Function: Imaginary part of "cacosh_upward":
++double: 3
++float: 2
++
++Function: "carg":
++float: 1
++
++Function: "carg_downward":
++double: 1
++float: 2
++
++Function: "carg_towardzero":
++double: 1
++float: 2
++
++Function: "carg_upward":
++double: 1
++float: 1
++
++Function: Real part of "casin":
++double: 1
++float: 1
++
++Function: Imaginary part of "casin":
++double: 2
++float: 2
++
++Function: Real part of "casin_downward":
++double: 3
++float: 2
++
++Function: Imaginary part of "casin_downward":
++double: 5
++float: 3
++
++Function: Real part of "casin_towardzero":
++double: 3
++float: 1
++
++Function: Imaginary part of "casin_towardzero":
++double: 4
++float: 2
++
++Function: Real part of "casin_upward":
++double: 3
++float: 2
++
++Function: Imaginary part of "casin_upward":
++double: 5
++float: 5
++
++Function: Real part of "casinh":
++double: 2
++float: 2
++
++Function: Imaginary part of "casinh":
++double: 1
++float: 1
++
++Function: Real part of "casinh_downward":
++double: 5
++float: 3
++
++Function: Imaginary part of "casinh_downward":
++double: 3
++float: 2
++
++Function: Real part of "casinh_towardzero":
++double: 4
++float: 2
++
++Function: Imaginary part of "casinh_towardzero":
++double: 3
++float: 1
++
++Function: Real part of "casinh_upward":
++double: 5
++float: 5
++
++Function: Imaginary part of "casinh_upward":
++double: 3
++float: 2
++
++Function: Real part of "catan":
++double: 1
++float: 1
++
++Function: Imaginary part of "catan":
++double: 1
++float: 1
++
++Function: Real part of "catan_downward":
++double: 1
++float: 2
++
++Function: Imaginary part of "catan_downward":
++double: 2
++float: 2
++
++Function: Real part of "catan_towardzero":
++double: 1
++float: 2
++
++Function: Imaginary part of "catan_towardzero":
++double: 2
++float: 2
++
++Function: Real part of "catan_upward":
++double: 1
++float: 1
++
++Function: Imaginary part of "catan_upward":
++double: 2
++float: 2
++
++Function: Real part of "catanh":
++double: 1
++float: 1
++
++Function: Imaginary part of "catanh":
++double: 1
++float: 1
++
++Function: Real part of "catanh_downward":
++double: 2
++float: 2
++
++Function: Imaginary part of "catanh_downward":
++double: 1
++float: 2
++
++Function: Real part of "catanh_towardzero":
++double: 2
++float: 2
++
++Function: Imaginary part of "catanh_towardzero":
++double: 1
++float: 2
++
++Function: Real part of "catanh_upward":
++double: 4
++float: 4
++
++Function: Imaginary part of "catanh_upward":
++double: 1
++float: 1
++
++Function: "cbrt":
++double: 4
++float: 1
++
++Function: "cbrt_downward":
++double: 4
++float: 1
++
++Function: "cbrt_towardzero":
++double: 3
++float: 1
++
++Function: "cbrt_upward":
++double: 5
++float: 1
++
++Function: Real part of "ccos":
++double: 1
++float: 1
++
++Function: Imaginary part of "ccos":
++double: 1
++float: 1
++
++Function: Real part of "ccos_downward":
++double: 1
++float: 1
++
++Function: Imaginary part of "ccos_downward":
++double: 3
++float: 3
++
++Function: Real part of "ccos_towardzero":
++double: 1
++float: 2
++
++Function: Imaginary part of "ccos_towardzero":
++double: 3
++float: 3
++
++Function: Real part of "ccos_upward":
++double: 1
++float: 2
++
++Function: Imaginary part of "ccos_upward":
++double: 2
++float: 2
++
++Function: Real part of "ccosh":
++double: 1
++float: 1
++
++Function: Imaginary part of "ccosh":
++double: 1
++float: 1
++
++Function: Real part of "ccosh_downward":
++double: 2
++float: 2
++
++Function: Imaginary part of "ccosh_downward":
++double: 3
++float: 3
++
++Function: Real part of "ccosh_towardzero":
++double: 2
++float: 3
++
++Function: Imaginary part of "ccosh_towardzero":
++double: 3
++float: 3
++
++Function: Real part of "ccosh_upward":
++double: 1
++float: 2
++
++Function: Imaginary part of "ccosh_upward":
++double: 2
++float: 2
++
++Function: Real part of "cexp":
++double: 2
++float: 1
++
++Function: Imaginary part of "cexp":
++double: 1
++float: 2
++
++Function: Real part of "cexp_downward":
++double: 2
++float: 2
++
++Function: Imaginary part of "cexp_downward":
++double: 3
++float: 3
++
++Function: Real part of "cexp_towardzero":
++double: 2
++float: 2
++
++Function: Imaginary part of "cexp_towardzero":
++double: 3
++float: 3
++
++Function: Real part of "cexp_upward":
++double: 2
++float: 2
++
++Function: Imaginary part of "cexp_upward":
++double: 3
++float: 2
++
++Function: Real part of "clog":
++double: 3
++float: 3
++
++Function: Imaginary part of "clog":
++double: 1
++float: 1
++
++Function: Real part of "clog10":
++double: 3
++float: 4
++
++Function: Imaginary part of "clog10":
++double: 2
++float: 2
++
++Function: Real part of "clog10_downward":
++double: 5
++float: 5
++
++Function: Imaginary part of "clog10_downward":
++double: 2
++float: 4
++
++Function: Real part of "clog10_towardzero":
++double: 5
++float: 6
++
++Function: Imaginary part of "clog10_towardzero":
++double: 2
++float: 4
++
++Function: Real part of "clog10_upward":
++double: 6
++float: 5
++
++Function: Imaginary part of "clog10_upward":
++double: 2
++float: 4
++
++Function: Real part of "clog_downward":
++double: 4
++float: 3
++
++Function: Imaginary part of "clog_downward":
++double: 1
++float: 2
++
++Function: Real part of "clog_towardzero":
++double: 4
++float: 4
++
++Function: Imaginary part of "clog_towardzero":
++double: 1
++float: 3
++
++Function: Real part of "clog_upward":
++double: 4
++float: 3
++
++Function: Imaginary part of "clog_upward":
++double: 1
++float: 2
++
++Function: "cos":
++double: 1
++float: 1
++
++Function: "cos_downward":
++double: 1
++float: 1
++
++Function: "cos_towardzero":
++double: 1
++float: 1
++
++Function: "cos_upward":
++double: 1
++float: 1
++
++Function: "cosh":
++double: 2
++float: 2
++
++Function: "cosh_downward":
++double: 3
++float: 2
++
++Function: "cosh_towardzero":
++double: 3
++float: 2
++
++Function: "cosh_upward":
++double: 2
++float: 2
++
++Function: Real part of "cpow":
++double: 2
++float: 5
++
++Function: Imaginary part of "cpow":
++float: 2
++
++Function: Real part of "cpow_downward":
++double: 5
++float: 8
++
++Function: Imaginary part of "cpow_downward":
++double: 1
++float: 2
++
++Function: Real part of "cpow_towardzero":
++double: 5
++float: 8
++
++Function: Imaginary part of "cpow_towardzero":
++double: 1
++float: 2
++
++Function: Real part of "cpow_upward":
++double: 4
++float: 1
++
++Function: Imaginary part of "cpow_upward":
++double: 1
++float: 2
++
++Function: Real part of "csin":
++double: 1
++float: 1
++
++Function: Real part of "csin_downward":
++double: 3
++float: 3
++
++Function: Imaginary part of "csin_downward":
++double: 1
++float: 1
++
++Function: Real part of "csin_towardzero":
++double: 3
++float: 3
++
++Function: Imaginary part of "csin_towardzero":
++double: 1
++float: 1
++
++Function: Real part of "csin_upward":
++double: 2
++float: 2
++
++Function: Imaginary part of "csin_upward":
++double: 1
++float: 2
++
++Function: Real part of "csinh":
++float: 1
++
++Function: Imaginary part of "csinh":
++double: 1
++float: 1
++
++Function: Real part of "csinh_downward":
++double: 2
++float: 1
++
++Function: Imaginary part of "csinh_downward":
++double: 3
++float: 3
++
++Function: Real part of "csinh_towardzero":
++double: 2
++float: 2
++
++Function: Imaginary part of "csinh_towardzero":
++double: 3
++float: 3
++
++Function: Real part of "csinh_upward":
++double: 1
++float: 2
++
++Function: Imaginary part of "csinh_upward":
++double: 2
++float: 2
++
++Function: Real part of "csqrt":
++double: 2
++float: 2
++
++Function: Imaginary part of "csqrt":
++double: 2
++float: 2
++
++Function: Real part of "csqrt_downward":
++double: 5
++float: 4
++
++Function: Imaginary part of "csqrt_downward":
++double: 4
++float: 3
++
++Function: Real part of "csqrt_towardzero":
++double: 4
++float: 3
++
++Function: Imaginary part of "csqrt_towardzero":
++double: 4
++float: 3
++
++Function: Real part of "csqrt_upward":
++double: 5
++float: 4
++
++Function: Imaginary part of "csqrt_upward":
++double: 3
++float: 3
++
++Function: Real part of "ctan":
++double: 1
++float: 1
++
++Function: Imaginary part of "ctan":
++double: 2
++float: 2
++
++Function: Real part of "ctan_downward":
++double: 6
++float: 5
++
++Function: Imaginary part of "ctan_downward":
++double: 2
++float: 2
++
++Function: Real part of "ctan_towardzero":
++double: 5
++float: 2
++
++Function: Imaginary part of "ctan_towardzero":
++double: 2
++float: 2
++
++Function: Real part of "ctan_upward":
++double: 2
++float: 4
++
++Function: Imaginary part of "ctan_upward":
++double: 1
++float: 2
++
++Function: Real part of "ctanh":
++double: 2
++float: 2
++
++Function: Imaginary part of "ctanh":
++double: 2
++float: 2
++
++Function: Real part of "ctanh_downward":
++double: 2
++float: 2
++
++Function: Imaginary part of "ctanh_downward":
++double: 6
++float: 5
++
++Function: Real part of "ctanh_towardzero":
++double: 2
++float: 2
++
++Function: Imaginary part of "ctanh_towardzero":
++double: 5
++float: 2
++
++Function: Real part of "ctanh_upward":
++double: 1
++float: 2
++
++Function: Imaginary part of "ctanh_upward":
++double: 3
++float: 3
++
++Function: "erf":
++double: 1
++float: 1
++
++Function: "erf_downward":
++double: 1
++float: 1
++
++Function: "erf_towardzero":
++double: 1
++float: 1
++
++Function: "erf_upward":
++double: 1
++float: 1
++
++Function: "erfc":
++double: 3
++float: 3
++
++Function: "erfc_downward":
++double: 4
++float: 4
++
++Function: "erfc_towardzero":
++double: 3
++float: 3
++
++Function: "erfc_upward":
++double: 4
++float: 4
++
++Function: "exp":
++double: 1
++float: 1
++
++Function: "exp10":
++double: 2
++float: 1
++
++Function: "exp10_downward":
++double: 3
++float: 1
++
++Function: "exp10_towardzero":
++double: 3
++float: 1
++
++Function: "exp10_upward":
++double: 2
++float: 1
++
++Function: "exp2":
++double: 1
++
++Function: "exp2_downward":
++double: 1
++float: 1
++
++Function: "exp2_towardzero":
++double: 1
++float: 1
++
++Function: "exp2_upward":
++double: 1
++float: 1
++
++Function: "exp_downward":
++double: 1
++float: 1
++
++Function: "exp_towardzero":
++double: 1
++float: 1
++
++Function: "exp_upward":
++double: 1
++float: 1
++
++Function: "expm1":
++double: 1
++float: 1
++
++Function: "expm1_downward":
++double: 1
++float: 1
++
++Function: "expm1_towardzero":
++double: 1
++float: 2
++
++Function: "expm1_upward":
++double: 1
++float: 1
++
++Function: "gamma":
++double: 4
++float: 7
++
++Function: "gamma_downward":
++double: 4
++float: 4
++
++Function: "gamma_towardzero":
++double: 4
++float: 3
++
++Function: "gamma_upward":
++double: 4
++float: 5
++
++Function: "hypot":
++double: 1
++float: 1
++
++Function: "hypot_downward":
++double: 1
++float: 1
++
++Function: "hypot_towardzero":
++double: 1
++float: 1
++
++Function: "hypot_upward":
++double: 1
++float: 1
++
++Function: "j0":
++double: 4
++float: 9
++
++Function: "j0_downward":
++double: 6
++float: 8
++
++Function: "j0_towardzero":
++double: 4
++float: 9
++
++Function: "j0_upward":
++double: 4
++float: 9
++
++Function: "j1":
++double: 3
++float: 9
++
++Function: "j1_downward":
++double: 9
++float: 9
++
++Function: "j1_towardzero":
++double: 5
++float: 9
++
++Function: "j1_upward":
++double: 5
++float: 8
++
++Function: "jn":
++double: 4
++float: 4
++
++Function: "jn_downward":
++double: 4
++float: 5
++
++Function: "jn_towardzero":
++double: 4
++float: 5
++
++Function: "jn_upward":
++double: 5
++float: 5
++
++Function: "lgamma":
++double: 4
++float: 7
++
++Function: "lgamma_downward":
++double: 4
++float: 4
++
++Function: "lgamma_towardzero":
++double: 4
++float: 3
++
++Function: "lgamma_upward":
++double: 4
++float: 5
++
++Function: "log":
++double: 1
++
++Function: "log10":
++double: 2
++float: 2
++
++Function: "log10_downward":
++double: 2
++float: 3
++
++Function: "log10_towardzero":
++double: 2
++float: 2
++
++Function: "log10_upward":
++double: 2
++float: 2
++
++Function: "log1p":
++double: 1
++float: 1
++
++Function: "log1p_downward":
++double: 1
++float: 2
++
++Function: "log1p_towardzero":
++double: 2
++float: 2
++
++Function: "log1p_upward":
++double: 2
++float: 2
++
++Function: "log2":
++double: 2
++float: 1
++
++Function: "log2_downward":
++double: 1
++float: 1
++
++Function: "log2_towardzero":
++double: 1
++float: 1
++
++Function: "log2_upward":
++double: 1
++float: 1
++
++Function: "log_downward":
++double: 1
++float: 1
++
++Function: "log_towardzero":
++double: 1
++float: 1
++
++Function: "log_upward":
++double: 1