From 09bf6406b102b89e52f734b517030b86b7583aaf Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 26 Sep 2000 19:13:37 +0000 Subject: [PATCH] Update. 2000-09-26 Jakub Jelinek * sysdeps/sparc/sparc32/bits/endian.h: Remove. * sysdeps/sparc/sparc32/ieee754.h: New. * sysdeps/sparc/sparc64/bits/endian.h: Move... * sysdeps/sparc/bits/endian.h: ...here. * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Optimize. * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Check %o1, not %o0 to see if we're parent or child. Optimize. 2000-09-26 Jes Sorensen * sysdeps/unix/sysv/linux/ia64/fork.S: New file (based on code by Hans Boehm). * sysdeps/unix/sysv/linux/ia64/vfork.S: New file (based on code by Hans Boehm). * sysdeps/unix/sysv/linux/ia64/fork.c: Deleted (obsoleted by fork.S). 2000-09-20 H.J. Lu * sysdeps/ia64/fpu/printf_fphex.c: New file. * sysdeps/ia64/fpu/libm-test-ulps: New file. 2000-09-17 H.J. Lu * sysdeps/ia64/Makefile (long-double-fcts): New. Defined as yes. * sysdeps/ia64/fpu/s_isinfl.c: New file. Include sysdeps/i386/fpu/s_isinfl.c. * sysdeps/ia64/fpu/s_isnanl.c: New file. Include sysdeps/i386/fpu/s_isnanl.c. * sysdeps/ia64/fpu/s_nextafterl.c: New file. Include sysdeps/i386/fpu/s_nextafterl.c. * sysdeps/ia64/fpu/bits/mathdef.h: New file. Copied from sysdeps/i386/fpu/bits/mathdef.h. 2000-09-16 H.J. Lu * sysdeps/generic/ldsodefs.h (DL_UNMAP): New. Defined if DL_UNMAP_IS_SPECIAL is not defined. * sysdeps/ia64/dl-lookupcfg.h (DL_UNMAP_IS_SPECIAL): Defined. (_dl_unmap): New prototype. (DL_UNMAP): New. Defined as _dl_unmap. * sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_unmap. * elf/dl-close.c (_dl_close): Replace __munmap with DL_UNMAP. 2000-09-16 H.J. Lu * sysdeps/generic/ldsodefs.h (DL_LOOKUP_ADDRESS): New. Defined if ELF_FUNCTION_PTR_IS_SPECIAL is not defined. * sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): New prototype. (DL_LOOKUP_ADDRESS): New. Defined as _dl_lookup_address. * sysdeps/ia64/dl-fptr.c (_dl_lookup_address): New. Lookup the memory location of a function from a function descriptor. * sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_lookup_address. * elf/dl-addr.c (_dl_addr): Use DL_LOOKUP_ADDRESS to get the memory location. 2000-09-14 Jes Sorensen * sysdeps/ia64/bits/byteswap.h (__bswap_16): Don't mark output variable as input argument. (__bswap_32): Likewise. * sysdeps/ia64/dl-machine.h: Add missing stop bit in RTLD_START() - found by Jim Wilson 2000-09-26 Ulrich Drepper * string/strxfrm.c: Only require alignment on __alignof__ (int32_t) instead of 4. 2000-09-26 Andreas Schwab * locale/programs/ld-collate.c (collate_output): Only require alignment on __alignof__ (int32_t) instead of 4. * locale/loadlocale.c (_nl_load_locale): Likewise. * string/strcoll.c: Likewise. 2000-09-26 Jes Sorensen * sysdeps/ieee754/ldbl-96/e_atan2l.c (__ieee754_atan2l): Add parentheses around arithmetic used in | statement to kill compiler warning. * math/math_private.h: Add prototype for __finitel. (__ilogbl): Likewise. (__isinfl): Likewise. (__isnanl): Likewise. (__atanl): Likewise. (__copysignl): Likewise. (__expm1l): Likewise. (__floorl): Likewise. (__frexpl): Likewise. (__ldexpl): Likewise. (__log1pl): Likewise. (__nanl): Likewise. (__rintl): Likewise. (__scalbnl): Likewise. (__sqrtl): Likewise. (fabsl): Likewise. (__sincosl): Likewise. (si_isr) [USE_GNU]: Likewise. (ILL_BREAK) [USE_GNU]: Likewise. (FPE_DECOVF) [USE_GNU]: Likewise. (FPE_DECDIV) [USE_GNU]: Likewise. (FPE_DECERR) [USE_GNU]: Likewise. (FPE_INVASC) [USE_GNU]: Likewise. (FPE_INVDEC) [USE_GNU]: Likewise. (TRAP_BRANCH) [USE_GNU]: Likewise. (TRAP_HWBKPT) [USE_GNU]: Likewise. * sysdeps/ieee754/flt-32/s_exp2f.c: Likewise. --- ChangeLog | 135 +- elf/dl-addr.c | 2 +- elf/dl-close.c | 3 +- locale/loadlocale.c | 2 +- locale/programs/ld-collate.c | 20 +- math/math_private.h | 19 + string/strcoll.c | 8 +- string/strxfrm.c | 8 +- sysdeps/generic/ldsodefs.h | 10 +- sysdeps/ia64/Makefile | 3 + sysdeps/ia64/Versions | 2 +- sysdeps/ia64/bits/byteswap.h | 8 +- sysdeps/ia64/dl-fptr.c | 26 + sysdeps/ia64/dl-lookupcfg.h | 9 + sysdeps/ia64/dl-machine.h | 1 + sysdeps/ia64/fpu/bits/mathdef.h | 47 + sysdeps/ia64/fpu/libm-test-ulps | 1652 +++++++++++++++++++++++ sysdeps/ia64/fpu/printf_fphex.c | 80 ++ sysdeps/ia64/fpu/s_isinfl.c | 1 + sysdeps/ia64/fpu/s_isnanl.c | 1 + sysdeps/ia64/fpu/s_nextafterl.c | 1 + sysdeps/sparc/{sparc64 => }/bits/endian.h | 0 sysdeps/sparc/sparc32/bits/endian.h | 7 - sysdeps/sparc/sparc32/ieee754.h | 171 +++ sysdeps/unix/sysv/linux/ia64/{fork.c => fork.S} | 34 +- sysdeps/unix/sysv/linux/ia64/vfork.S | 43 + sysdeps/unix/sysv/linux/sparc/sparc32/clone.S | 14 +- sysdeps/unix/sysv/linux/sparc/sparc64/clone.S | 7 +- 28 files changed, 2242 insertions(+), 72 deletions(-) create mode 100644 sysdeps/ia64/fpu/bits/mathdef.h create mode 100644 sysdeps/ia64/fpu/libm-test-ulps create mode 100644 sysdeps/ia64/fpu/printf_fphex.c create mode 100644 sysdeps/ia64/fpu/s_isinfl.c create mode 100644 sysdeps/ia64/fpu/s_isnanl.c create mode 100644 sysdeps/ia64/fpu/s_nextafterl.c rename sysdeps/sparc/{sparc64 => }/bits/endian.h (100%) delete mode 100644 sysdeps/sparc/sparc32/bits/endian.h create mode 100644 sysdeps/sparc/sparc32/ieee754.h rename sysdeps/unix/sysv/linux/ia64/{fork.c => fork.S} (61%) create mode 100644 sysdeps/unix/sysv/linux/ia64/vfork.S diff --git a/ChangeLog b/ChangeLog index a0255ab..5281137 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,118 @@ +2000-09-26 Jakub Jelinek + + * sysdeps/sparc/sparc32/bits/endian.h: Remove. + * sysdeps/sparc/sparc32/ieee754.h: New. + * sysdeps/sparc/sparc64/bits/endian.h: Move... + * sysdeps/sparc/bits/endian.h: ...here. + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Optimize. + * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): Check + %o1, not %o0 to see if we're parent or child. Optimize. + +2000-09-26 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/fork.S: New file (based on code + by Hans Boehm). + * sysdeps/unix/sysv/linux/ia64/vfork.S: New file (based on + code by Hans Boehm). + * sysdeps/unix/sysv/linux/ia64/fork.c: Deleted (obsoleted by fork.S). + +2000-09-20 H.J. Lu + + * sysdeps/ia64/fpu/printf_fphex.c: New file. + + * sysdeps/ia64/fpu/libm-test-ulps: New file. + +2000-09-17 H.J. Lu + + * sysdeps/ia64/Makefile (long-double-fcts): New. Defined as yes. + + * sysdeps/ia64/fpu/s_isinfl.c: New file. Include + sysdeps/i386/fpu/s_isinfl.c. + + * sysdeps/ia64/fpu/s_isnanl.c: New file. Include + sysdeps/i386/fpu/s_isnanl.c. + + * sysdeps/ia64/fpu/s_nextafterl.c: New file. Include + sysdeps/i386/fpu/s_nextafterl.c. + + * sysdeps/ia64/fpu/bits/mathdef.h: New file. Copied from + sysdeps/i386/fpu/bits/mathdef.h. + +2000-09-16 H.J. Lu + + * sysdeps/generic/ldsodefs.h (DL_UNMAP): New. Defined if + DL_UNMAP_IS_SPECIAL is not defined. + + * sysdeps/ia64/dl-lookupcfg.h (DL_UNMAP_IS_SPECIAL): Defined. + (_dl_unmap): New prototype. + (DL_UNMAP): New. Defined as _dl_unmap. + + * sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_unmap. + + * elf/dl-close.c (_dl_close): Replace __munmap with DL_UNMAP. + +2000-09-16 H.J. Lu + + * sysdeps/generic/ldsodefs.h (DL_LOOKUP_ADDRESS): New. Defined + if ELF_FUNCTION_PTR_IS_SPECIAL is not defined. + + * sysdeps/ia64/dl-lookupcfg.h (_dl_lookup_address): New + prototype. + (DL_LOOKUP_ADDRESS): New. Defined as _dl_lookup_address. + + * sysdeps/ia64/dl-fptr.c (_dl_lookup_address): New. Lookup + the memory location of a function from a function descriptor. + + * sysdeps/ia64/Versions [ld] (GLIBC_2.2): Add _dl_lookup_address. + + * elf/dl-addr.c (_dl_addr): Use DL_LOOKUP_ADDRESS to get the + memory location. + +2000-09-14 Jes Sorensen + + * sysdeps/ia64/bits/byteswap.h (__bswap_16): Don't mark output + variable as input argument. + (__bswap_32): Likewise. + + * sysdeps/ia64/dl-machine.h: Add missing stop bit in RTLD_START() + - found by Jim Wilson + +2000-09-26 Ulrich Drepper + + * string/strxfrm.c: Only require alignment on __alignof__ (int32_t) + instead of 4. + +2000-09-26 Andreas Schwab + + * locale/programs/ld-collate.c (collate_output): Only require + alignment on __alignof__ (int32_t) instead of 4. + * locale/loadlocale.c (_nl_load_locale): Likewise. + * string/strcoll.c: Likewise. + +2000-09-26 Jes Sorensen + + * sysdeps/ieee754/ldbl-96/e_atan2l.c (__ieee754_atan2l): Add + parentheses around arithmetic used in | statement to kill compiler + warning. + + * math/math_private.h: Add prototype for __finitel. + (__ilogbl): Likewise. + (__isinfl): Likewise. + (__isnanl): Likewise. + (__atanl): Likewise. + (__copysignl): Likewise. + (__expm1l): Likewise. + (__floorl): Likewise. + (__frexpl): Likewise. + (__ldexpl): Likewise. + (__log1pl): Likewise. + (__nanl): Likewise. + (__rintl): Likewise. + (__scalbnl): Likewise. + (__sqrtl): Likewise. + (fabsl): Likewise. + (__sincosl): Likewise. + 2000-09-26 Andreas Schwab * sysdeps/m68k/fpu/libm-test-ulps: New file @@ -4715,15 +4830,15 @@ based on sysdeps/unix/sysv/linux/bits/siginfo.h. Change type of si_band from "int" to "long". (si_imm) [USE_GNU]: Define - (si_isr) [USE_GNU]: Ditto. - (ILL_BREAK) [USE_GNU]: Ditto. - (FPE_DECOVF) [USE_GNU]: Ditto. - (FPE_DECDIV) [USE_GNU]: Ditto. - (FPE_DECERR) [USE_GNU]: Ditto. - (FPE_INVASC) [USE_GNU]: Ditto. - (FPE_INVDEC) [USE_GNU]: Ditto. - (TRAP_BRANCH) [USE_GNU]: Ditto. - (TRAP_HWBKPT) [USE_GNU]: Ditto. + (si_isr) [USE_GNU]: Likewise. + (ILL_BREAK) [USE_GNU]: Likewise. + (FPE_DECOVF) [USE_GNU]: Likewise. + (FPE_DECDIV) [USE_GNU]: Likewise. + (FPE_DECERR) [USE_GNU]: Likewise. + (FPE_INVASC) [USE_GNU]: Likewise. + (FPE_INVDEC) [USE_GNU]: Likewise. + (TRAP_BRANCH) [USE_GNU]: Likewise. + (TRAP_HWBKPT) [USE_GNU]: Likewise. 2000-07-06 Jes Sorensen @@ -5570,7 +5685,7 @@ * sysdeps/ieee754/dbl-64/s_exp2.c: Add include stdlib.h to get prototype for abs(). - * sysdeps/ieee754/flt-32/s_exp2f.c: ditto. + * sysdeps/ieee754/flt-32/s_exp2f.c: Likewise. 2000-06-23 Andreas Jaeger diff --git a/elf/dl-addr.c b/elf/dl-addr.c index 2fda238..ed183b1 100644 --- a/elf/dl-addr.c +++ b/elf/dl-addr.c @@ -26,7 +26,7 @@ int internal_function _dl_addr (const void *address, Dl_info *info) { - const ElfW(Addr) addr = (ElfW(Addr)) address; + const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address); struct link_map *l, *match; const ElfW(Sym) *symtab, *matchsym; const char *strtab; diff --git a/elf/dl-close.c b/elf/dl-close.c index 40bc6f7..f62c171 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -167,8 +167,7 @@ _dl_close (void *_map) /* We can unmap all the maps at once. We determined the start address and length when we loaded the object and the `munmap' call does the rest. */ - __munmap ((void *) imap->l_map_start, - imap->l_map_end - imap->l_map_start); + DL_UNMAP (imap); /* Finally, unlink the data structure and free it. */ #ifdef SHARED diff --git a/locale/loadlocale.c b/locale/loadlocale.c index 4aacbc9..8c7afda 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -217,7 +217,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category) } if (__builtin_expect (_nl_value_types[category][cnt] == word, 0)) { - assert (idx % 4 == 0); + assert (idx % __alignof__ (u_int32_t) == 0); newdata->values[cnt].word = *((u_int32_t *) (newdata->filedata + idx)); } diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index da3cfa7..d417c66 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -2204,21 +2204,21 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_len = 0; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP2)); iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_len = 0; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_GAP3)); iov[2 + cnt].iov_base = NULL; iov[2 + cnt].iov_len = 0; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; /* Since we are using the sign of an integer to mark indirection the @@ -2368,7 +2368,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_len = tablewc.result_size; idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_WEIGHTWC)); @@ -2376,7 +2376,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = obstack_finish (&weightpool); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_EXTRAWC)); @@ -2384,7 +2384,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = obstack_finish (&extrapool); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_INDIRECTWC)); @@ -2392,7 +2392,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = obstack_finish (&indirectpool); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (iov[2 + cnt].iov_len % sizeof (int32_t) == 0); - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; @@ -2493,14 +2493,14 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, iov[2 + cnt].iov_base = &elem_size; iov[2 + cnt].iov_len = sizeof (int32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_TABLEMB)); iov[2 + cnt].iov_base = elem_table; iov[2 + cnt].iov_len = elem_size * 2 * sizeof (int32_t); idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_SYMB_EXTRAMB)); @@ -2518,7 +2518,7 @@ collate_output (struct localedef_t *locale, struct charmap_t *charmap, assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_COLLSEQWC)); iov[2 + cnt].iov_base = collate->wcseqorder.result; iov[2 + cnt].iov_len = collate->wcseqorder.result_size; - assert (idx[cnt] % 4 == 0); + assert (idx[cnt] % __alignof__ (int32_t) == 0); ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); diff --git a/math/math_private.h b/math/math_private.h index 99be167..280f81d 100644 --- a/math/math_private.h +++ b/math/math_private.h @@ -267,4 +267,23 @@ extern void __kernel_sincosl (long double,long double, extern int __kernel_rem_pio2l (long double*,long double*,int,int, int,const int*); +/* prototypes required to compile the ldbl-96 support without warnings */ +extern int __finitel (long double); +extern int __ilogbl(long double); +extern int __isinfl (long double); +extern int __isnanl(long double); +extern long double __atanl (long double); +extern long double __copysignl(long double, long double); +extern long double __expm1l (long double); +extern long double __floorl(long double); +extern long double __frexpl(long double, int *); +extern long double __ldexpl(long double, int); +extern long double __log1pl (long double); +extern long double __nanl (const char *); +extern long double __rintl(long double); +extern long double __scalbnl (long double, int); +extern long double __sqrtl(long double x); +extern long double fabsl(long double x); +extern void __sincosl (long double, long double *, long double *); + #endif /* _MATH_PRIVATE_H_ */ diff --git a/string/strcoll.c b/string/strcoll.c index 14b2039..49725e1 100644 --- a/string/strcoll.c +++ b/string/strcoll.c @@ -127,10 +127,10 @@ STRCOLL (s1, s2, l) #endif use_malloc = 0; - assert (((uintptr_t) table) % sizeof (table[0]) == 0); - assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); - assert (((uintptr_t) extra) % sizeof (extra[0]) == 0); - assert (((uintptr_t) indirect) % sizeof (indirect[0]) == 0); + assert (((uintptr_t) table) % __alignof__ (table[0]) == 0); + assert (((uintptr_t) weights) % __alignof__ (weights[0]) == 0); + assert (((uintptr_t) extra) % __alignof__ (extra[0]) == 0); + assert (((uintptr_t) indirect) % __alignof__ (indirect[0]) == 0); /* We need this a few times. */ s1len = STRLEN (s1); diff --git a/string/strxfrm.c b/string/strxfrm.c index b9d3209..df44586 100644 --- a/string/strxfrm.c +++ b/string/strxfrm.c @@ -151,10 +151,10 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l) #endif use_malloc = 0; - assert (((uintptr_t) table) % sizeof (table[0]) == 0); - assert (((uintptr_t) weights) % sizeof (weights[0]) == 0); - assert (((uintptr_t) extra) % sizeof (extra[0]) == 0); - assert (((uintptr_t) indirect) % sizeof (indirect[0]) == 0); + assert (((uintptr_t) table) % __alignof__ (table[0]) == 0); + assert (((uintptr_t) weights) % __alignof__ (weights[0]) == 0); + assert (((uintptr_t) extra) % __alignof__ (extra[0]) == 0); + assert (((uintptr_t) indirect) % __alignof__ (indirect[0]) == 0); /* Handle an empty string as a special case. */ if (srclen == 0) diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index b93482c..e16a42a 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -67,8 +67,16 @@ typedef ElfW(Addr) lookup_t; to the actual code of the function but rather an architecture specific descriptor. */ #ifndef ELF_FUNCTION_PTR_IS_SPECIAL -#define DL_SYMBOL_ADDRESS(map, ref) \ +# define DL_SYMBOL_ADDRESS(map, ref) \ (void *) (LOOKUP_VALUE_ADDRESS (map) + ref->st_value) +# define DL_LOOKUP_ADDRESS(addr) ((ElfW(Addr)) (addr)) +#endif + +/* Unmap a loaded object, called by _dl_close (). */ +#ifndef DL_UNMAP_IS_SPECIAL +# define DL_UNMAP(map) \ + __munmap ((void *) (map)->l_map_start, \ + (map)->l_map_end - (map)->l_map_start) #endif /* For the version handling we need an array with only names and their diff --git a/sysdeps/ia64/Makefile b/sysdeps/ia64/Makefile index 5f4ca3d..d2f690e 100644 --- a/sysdeps/ia64/Makefile +++ b/sysdeps/ia64/Makefile @@ -1,3 +1,6 @@ +# The ia64 `long double' is a distinct type we support. +long-double-fcts = yes + ifeq ($(subdir), csu) CPPFLAGS-start.S = -D__ASSEMBLY__ endif diff --git a/sysdeps/ia64/Versions b/sysdeps/ia64/Versions index e332317..20fea95 100644 --- a/sysdeps/ia64/Versions +++ b/sysdeps/ia64/Versions @@ -1,6 +1,6 @@ ld { GLIBC_2.2 { # ia64 specific functions in the dynamic linker, but used by libc.so. - _dl_symbol_address; + _dl_symbol_address; _dl_unmap; _dl_lookup_address; } } diff --git a/sysdeps/ia64/bits/byteswap.h b/sysdeps/ia64/bits/byteswap.h index d728b64..2156d23 100644 --- a/sysdeps/ia64/bits/byteswap.h +++ b/sysdeps/ia64/bits/byteswap.h @@ -33,9 +33,9 @@ __v = __bswap_constant_16 (x); \ else \ __asm__ __volatile__ ("shl %0 = %1, 48 ;;" \ - "mux1 %0 = %2, @rev ;;" \ + "mux1 %0 = %0, @rev ;;" \ : "=r" (__v) \ - : "r" ((unsigned short int) (x)), "0" (__v));\ + : "r" ((unsigned short int) (x))); \ __v; })) #else /* This is better than nothing. */ @@ -56,9 +56,9 @@ __v = __bswap_constant_32 (x); \ else \ __asm__ __volatile__ ("shl %0 = %1, 32 ;;" \ - "mux1 %0 = %2, @rev ;;" \ + "mux1 %0 = %0, @rev ;;" \ : "=r" (__v) \ - : "r" ((unsigned int) (x)), "0" (__v)); \ + : "r" ((unsigned int) (x))); \ __v; })) #else # define __bswap_32(x) __bswap_constant_32 (x) diff --git a/sysdeps/ia64/dl-fptr.c b/sysdeps/ia64/dl-fptr.c index 0fb9654..85fefa3 100644 --- a/sysdeps/ia64/dl-fptr.c +++ b/sysdeps/ia64/dl-fptr.c @@ -184,3 +184,29 @@ _dl_unmap (struct link_map *map) __ia64_fptr_lock = 0; #endif } + +Elf64_Addr +_dl_lookup_address (const void *address) +{ + Elf64_Addr addr = (Elf64_Addr) address; + struct ia64_fptr *f; + +#ifdef _LIBC_REENTRANT + /* Make sure we are alone. */ + while (testandset (&__ia64_fptr_lock)); +#endif + + for (f = __fptr_root; f != NULL; f = f->next) + if (f == address) + { + addr = f->func; + break; + } + +#ifdef _LIBC_REENTRANT + /* Release the lock. */ + __ia64_fptr_lock = 0; +#endif + + return addr; +} diff --git a/sysdeps/ia64/dl-lookupcfg.h b/sysdeps/ia64/dl-lookupcfg.h index ab2ff1f..4e14e3b 100644 --- a/sysdeps/ia64/dl-lookupcfg.h +++ b/sysdeps/ia64/dl-lookupcfg.h @@ -21,7 +21,16 @@ than just the address. */ #define DL_LOOKUP_RETURNS_MAP #define ELF_FUNCTION_PTR_IS_SPECIAL +#define DL_UNMAP_IS_SPECIAL void *_dl_symbol_address (const struct link_map *map, const ElfW(Sym) *ref); #define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref) + +Elf64_Addr _dl_lookup_address (const void *address); + +#define DL_LOOKUP_ADDRESS(addr) _dl_lookup_address (addr) + +void _dl_unmap (struct link_map *map); + +#define DL_UNMAP(map) _dl_unmap (map) diff --git a/sysdeps/ia64/dl-machine.h b/sysdeps/ia64/dl-machine.h index fd94d13..aedf2a3 100644 --- a/sysdeps/ia64/dl-machine.h +++ b/sysdeps/ia64/dl-machine.h @@ -351,6 +351,7 @@ _dl_start_user: { .mmb st8 [r10] = out1 /* Record the new argc. */ ld8 out0 = [out0] + ;; } { .mfb ld8 out0 = [out0] /* get the linkmap */ diff --git a/sysdeps/ia64/fpu/bits/mathdef.h b/sysdeps/ia64/fpu/bits/mathdef.h new file mode 100644 index 0000000..bd2ce5d --- /dev/null +++ b/sysdeps/ia64/fpu/bits/mathdef.h @@ -0,0 +1,47 @@ +/* Copyright (C) 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#if !defined _MATH_H && !defined _COMPLEX_H +# error "Never use directly; include instead" +#endif + +#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF +# define _MATH_H_MATHDEF 1 + +/* The ix87 FPUs evaluate all values in the 80 bit floating-point format + which is also available for the user as `long double'. Therefore we + define: */ +typedef long double float_t; /* `float' expressions are evaluated as + `long double'. */ +typedef long double double_t; /* `double' expressions are evaluated as + `long double'. */ + +/* Signal that both types are `long double'. */ +# define FLT_EVAL_METHOD 2 + +/* Define `INFINITY' as value of type `float'. */ +# define INFINITY HUGE_VALF + +/* The values returned by `ilogb' for 0 and NaN respectively. */ +# define FP_ILOGB0 (-2147483647 - 1) +# define FP_ILOGBNAN (-2147483647 - 1) + +/* Number of decimal digits for the `long double' type. */ +# define DECIMAL_DIG 18 + +#endif /* ISO C99 */ diff --git a/sysdeps/ia64/fpu/libm-test-ulps b/sysdeps/ia64/fpu/libm-test-ulps new file mode 100644 index 0000000..58e6bfa --- /dev/null +++ b/sysdeps/ia64/fpu/libm-test-ulps @@ -0,0 +1,1652 @@ +# Begin of automatic generation + +# acos +Test "acos (0.7) == 0.7953988301841435554": +float: 1 +ifloat: 1 +ildouble: 1150 +ldouble: 1150 + +# acosh +Test "acosh (7) == 2.6339157938496334172": +ldouble: 1 +ildouble: 1 + +# asin +Test "asin (-0.5) == -pi/6": +float: 2 +ifloat: 2 +Test "asin (0.5) == pi/6": +float: 2 +ifloat: 2 +Test "asin (0.7) == 0.7753974966107530637": +float: 2 +ifloat: 2 +double: 1 +idouble: 1 +ildouble: 1147 +ldouble: 1147 + +# asinh +Test "asinh (0.7) == 0.652666566082355786": +ildouble: 656 +ldouble: 656 + +# atan +Test "atan (0.7) == 0.6107259643892086165": +ildouble: 549 +ldouble: 549 + +# atan2 +Test "atan2 (0.4, 0.0003) == 1.5700463269355215718": +ildouble: 1 +ldouble: 1 +Test "atan2 (0.7, 1) == 0.6107259643892086165": +ildouble: 549 +ldouble: 549 + +# atanh +Test "atanh (0.7) == 0.8673005276940531944": +double: 1 +idouble: 1 +ildouble: 1605 +ldouble: 1605 + +# cabs +Test "cabs (-0.7 + 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-0.7 - 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-12.4 + 0.7 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (-12.4 - 0.7 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 +Test "cabs (0.7 + 1.2 i) == 1.3892443989449804508": +double: 1 +idouble: 1 +ildouble: 560 +ldouble: 560 +Test "cabs (0.7 + 12.4 i) == 12.41974234837422060118": +float: 1 +ifloat: 1 + +# cacos +Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199 + 1.9833870299165354323 i": +Test "Imaginary part of: cacos (-2 - 3 i) == 2.1414491111159960199 + 1.9833870299165354323 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 151 +ldouble: 151 +Test "Imaginary part of: cacos (0.7 + 1.2 i) == 1.1351827477151551089 - 1.0927647857577371459 i": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +# cacosh +Test "Real part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +double: 1 +float: 7 +idouble: 1 +ifloat: 7 +ildouble: 5 +ldouble: 5 +Test "Imaginary part of: cacosh (-2 - 3 i) == -1.9833870299165354323 + 2.1414491111159960199 i": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +ildouble: 1 +ldouble: 1 +Test "Real part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 328 +ldouble: 328 +Test "Imaginary part of: cacosh (0.7 + 1.2 i) == 1.0927647857577371459 + 1.1351827477151551089 i": +ildouble: 151 +ldouble: 151 + +# casin +Test "Real part of: casin (-2 - 3 i) == -0.5706527843210994007 - 1.9833870299165354323 i": +Test "Imaginary part of: casin (-2 - 3 i) == -0.5706527843210994007 - 1.9833870299165354323 i": +ildouble: 1 +ldouble: 1 +Test "Real part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 603 +ldouble: 603 +Test "Imaginary part of: casin (0.7 + 1.2 i) == 0.4356135790797415103 + 1.0927647857577371459 i": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +# casinh +Test "Real part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 +ildouble: 6 +ldouble: 6 +Test "Imaginary part of: casinh (-2 - 3 i) == -1.9686379257930962917 - 0.9646585044076027920 i": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 +ildouble: 6 +ldouble: 6 +Test "Real part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +double: 1 +idouble: 1 +ildouble: 892 +ldouble: 892 +Test "Imaginary part of: casinh (0.7 + 1.2 i) == 0.9786545955936738768 + 0.9113541895315601156 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 12 +ldouble: 12 + +# catan +Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +float: 3 +ifloat: 3 +Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225 - 0.2290726829685387662 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 7 +ldouble: 7 +Test "Real part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +float: 4 +ifloat: 4 +ildouble: 251 +ldouble: 251 +Test "Imaginary part of: catan (0.7 + 1.2 i) == 1.0785743834118921877 + 0.5770573776534306764 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 474 +ldouble: 474 + +# catanh +Test "Real part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +float: 1 +ifloat: 1 +double: 4 +idouble: 4 +ildouble: 6 +ldouble: 6 +Test "Imaginary part of: catanh (-2 - 3 i) == -0.1469466662255297520 - 1.3389725222944935611 i": +float: 4 +ifloat: 4 +Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +float: 6 +ifloat: 6 +double: 1 +idouble: 1 +ildouble: 66 +ldouble: 66 +Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959 + 0.9702403077950989849 i": +float: 6 +ifloat: 6 +double: 1 +idouble: 1 +ildouble: 447 +ldouble: 447 + +# cbrt +Test "cbrt (-0.001) == -0.1": +ildouble: 716 +ldouble: 716 +Test "cbrt (-27.0) == -3.0": +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "cbrt (0.7) == 0.8879040017426007084": +double: 1 +idouble: 1 +ildouble: 346 +ldouble: 346 +Test "cbrt (0.970299) == 0.99": +double: 1 +idouble: 1 +ildouble: 306 +ldouble: 306 + +# ccos +Test "Real part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i": +Test "Imaginary part of: ccos (-2 - 3 i) == -4.1896256909688072301 - 9.1092278937553365979 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 5 +ldouble: 5 +Test "Imaginary part of: ccos (0.7 + 1.2 i) == 1.3848657645312111080 - 0.97242170335830028619 i": +double: 1 +idouble: 1 +ildouble: 1901 +ldouble: 1901 + +# ccosh +Test "Real part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i": +float: 1 +ifloat: 1 +Test "Imaginary part of: ccosh (-2 - 3 i) == -3.7245455049153225654 + 0.5118225699873846088 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1467 +ldouble: 1467 +Test "Imaginary part of: ccosh (0.7 + 1.2 i) == 0.4548202223691477654 + 0.7070296600921537682 i": +double: 1 +idouble: 1 +ildouble: 1183 +ldouble: 1183 + +# cexp +Test "Real part of: cexp (-2.0 - 3.0 i) == -0.1339809149295426134 - 0.0190985162611351964 i": +ildouble: 4 +ldouble: 4 +Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.1339809149295426134 - 0.0190985162611351964 i": +float: 1 +ifloat: 1 +ildouble: 18 +ldouble: 18 +Test "Real part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 940 +ldouble: 940 +Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i": +float: 1 +ifloat: 1 +ildouble: 1067 +ldouble: 1067 + +# clog +Test "Real part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680 - 2.1587989303424641704 i": +float: 3 +ifloat: 3 +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +# clog10 +Test "Real part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i": +Test "Imaginary part of: clog10 (-2 - 3 i) == 0.5569716761534183846 - 0.9375544629863747085 i": +float: 5 +ifloat: 5 +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf + inf i) == inf + 3/4 pi*log10(e) i": +double: 1 +idouble: 1 +Test "Real part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": +Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1403 +ldouble: 1403 +Test "Imaginary part of: clog10 (0.7 + 1.2 i) == 0.1427786545038868803 + 0.4528483579352493248 i": +double: 1 +idouble: 1 +ildouble: 186 +ldouble: 186 +Test "Real part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": +Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": +Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": +Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "Real part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": +Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# cos +Test "cos (0.7) == 0.7648421872844884262": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 529 +ldouble: 529 +Test "cos (M_PI_6l * 2.0) == 0.5": +double: 1 +float: 0.5 +idouble: 1 +ifloat: 0.5 +Test "cos (M_PI_6l * 4.0) == -0.5": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 0.5 +ldouble: 0.5 +Test "cos (pi/2) == 0": +double: 0.2758 +float: 0.3667 +idouble: 0.2758 +ifloat: 0.3667 +ildouble: 0.25 +ldouble: 0.25 + +# cosh +Test "cosh (0.7) == 1.255169005630943018": +ildouble: 309 +ldouble: 309 + +# cpow +Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 +Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i": +float: 2 +ifloat: 2 +ildouble: 4 +ldouble: 4 +Test "Real part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": +Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i": +double: 1.104 +float: 2.5333 +idouble: 1.104 +ifloat: 2.5333 +ildouble: 1 +ldouble: 1 + +# csin +Test "Real part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": +float: 1 +ifloat: 1 +ildouble: 966 +ldouble: 966 +Test "Imaginary part of: csin (0.7 + 1.2 i) == 1.1664563419657581376 + 1.1544997246948547371 i": +float: 1 +ifloat: 1 +ildouble: 168 +ldouble: 168 + +# csinh +Test "Real part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i": +double: 1 +idouble: 1 +Test "Imaginary part of: csinh (-2 - 3 i) == 3.5905645899857799520 - 0.5309210862485198052 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2 +ldouble: 2 +Test "Real part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 413 +ldouble: 413 +Test "Imaginary part of: csinh (0.7 + 1.2 i) == 0.27487868678117583582 + 1.1698665727426565139 i": +float: 1 +ifloat: 1 +ildouble: 477 +ldouble: 477 + +# csqrt +Test "Real part of: csqrt (-2 + 3 i) == 0.8959774761298381247 + 1.6741492280355400404 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csqrt (-2 + 3 i) == 0.8959774761298381247 + 1.6741492280355400404 i": +Test "Real part of: csqrt (-2 - 3 i) == 0.8959774761298381247 - 1.6741492280355400404 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Imaginary part of: csqrt (-2 - 3 i) == 0.8959774761298381247 - 1.6741492280355400404 i": +Test "Real part of: csqrt (0.7 + 1.2 i) == 1.0220676100300264507 + 0.5870453129635652115 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 237 +ldouble: 237 +Test "Imaginary part of: csqrt (0.7 + 1.2 i) == 1.0220676100300264507 + 0.5870453129635652115 i": +float: 1 +ifloat: 1 +ildouble: 128 +ldouble: 128 + +# ctan +Test "Real part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i": +double: 1 +idouble: 1 +ildouble: 437 +ldouble: 437 +Test "Imaginary part of: ctan (-2 - 3 i) == 0.0037640256415042482 - 1.0032386273536098014 i": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "Real part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 690 +ldouble: 690 +Test "Imaginary part of: ctan (0.7 + 1.2 i) == 0.1720734197630349001 + 0.9544807059989405538 i": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 367 +ldouble: 367 + +# ctanh +Test "Real part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 +ildouble: 2 +ldouble: 2 +Test "Imaginary part of: ctanh (-2 - 3 i) == -0.9653858790221331242 + 0.0098843750383224937 i": +float: 1 +ifloat: 1 +ildouble: 23 +ldouble: 23 +Test "Real part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": +Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i": +float: 1 +ifloat: 1 +double: 0.5 +idouble: 0.5 +Test "Real part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +ildouble: 286 +ldouble: 286 +Test "Imaginary part of: ctanh (0.7 + 1.2 i) == 1.3472197399061191630 + 0.4778641038326365540 i": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +ildouble: 3074 +ldouble: 3074 + +# erfc +Test "erfc (0.7) == 0.32219880616258152702": +double: 1 +idouble: 1 +Test "erfc (1.2) == 0.089686021770364619762": +float: 2 +double: 1 +idouble: 1 +ifloat: 2 +Test "erfc (2.0) == 0.0046777349810472658379": +double: 1 +idouble: 1 +Test "erfc (4.1) == 0.67000276540848983727e-8": +double: 24 +float: 12 +idouble: 24 +ifloat: 12 + +# exp +Test "exp (0.7) == 2.0137527074704765216": +ildouble: 412 +ldouble: 412 + +# exp10 +Test "exp10 (-1) == 0.1": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +ildouble: 818 +ldouble: 818 +Test "exp10 (0.7) == 5.0118723362727228500": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 1182 +ldouble: 1182 +Test "exp10 (3) == 1000": +float: 2 +ifloat: 2 +double: 6 +idouble: 6 +ildouble: 8 +ldouble: 8 + +# exp2 +Test "exp2 (0.7) == 1.6245047927124710452": +ildouble: 462 +ldouble: 462 + +# expm1 +Test "expm1 (1) == M_El - 1.0": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 + +# fmod +Test "fmod (-6.5, -2.3) == -1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (-6.5, 2.3) == -1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (6.5, -2.3) == 1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 +Test "fmod (6.5, 2.3) == 1.9": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 + +# gamma +Test "gamma (-0.5) == log(2*sqrt(pi))": +double: 1 +idouble: 1 + +# hypot +Test "hypot (-0.7, -12.4) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-0.7, 12.4) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-12.4, -0.7) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (-12.4, 0.7) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (0.7, -12.4) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (0.7, 1.2) == 1.3892443989449804508": +double: 1 +idouble: 1 +ildouble: 560 +ldouble: 560 +Test "hypot (0.7, 12.4) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (12.4, -0.7) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 +Test "hypot (12.4, 0.7) == 12.41974234837422060118": +float: 1 +ifloat: 1 +ildouble: 406 +ldouble: 406 + +# j0 +Test "j0 (10.0) == -0.24593576445134833520": +float: 1 +ifloat: 1 +Test "j0 (2.0) == 0.22389077914123566805": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "j0 (8.0) == 0.17165080713755390609": +float: 1 +ifloat: 1 +Test "j0 (10.0) == -0.24593576445134833520": +double: 2 +idouble: 2 + +# j1 +Test "j1 (10.0) == 0.043472746168861436670": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 +Test "j1 (2.0) == 0.57672480775687338720": +double: 1 +idouble: 1 +Test "j1 (8.0) == 0.23463634685391462438": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 + +# jn +Test "jn (0, 10.0) == -0.24593576445134833520": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "jn (0, 2.0) == 0.22389077914123566805": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "jn (0, 8.0) == 0.17165080713755390609": +float: 1 +ifloat: 1 +Test "jn (1, 10.0) == 0.043472746168861436670": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 +Test "jn (1, 2.0) == 0.57672480775687338720": +double: 1 +idouble: 1 +Test "jn (1, 8.0) == 0.23463634685391462438": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "jn (10, -1.0) == 0.26306151236874532070e-9": +float: 1 +ifloat: 1 +Test "jn (10, 0.1) == 0.26905328954342155795e-19": +float: 4 +ifloat: 4 +double: 6 +idouble: 6 +Test "jn (10, 0.7) == 0.75175911502153953928e-11": +double: 4 +float: 1 +idouble: 4 +ifloat: 1 +Test "jn (10, 1.0) == 0.26306151236874532070e-9": +float: 1 +ifloat: 1 +Test "jn (10, 2.0) == 0.25153862827167367096e-6": +float: 3 +ifloat: 3 +double: 2 +idouble: 2 +Test "jn (10, 10.0) == 0.20748610663335885770": +float: 2 +ifloat: 2 +double: 4 +idouble: 4 +Test "jn (3, 0.1) == 0.000020820315754756261429": +double: 1 +idouble: 1 +Test "jn (3, 0.7) == 0.0069296548267508408077": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "jn (3, 2.0) == 0.12894324947440205110": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "jn (3, 10.0) == 0.058379379305186812343": +float: 1 +ifloat: 1 +double: 3 +idouble: 3 + +# lgamma +Test "lgamma (-0.5) == log(2*sqrt(pi))": +double: 1 +idouble: 1 +Test "lgamma (0.7) == 0.26086724653166651439": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "lgamma (1.2) == -0.853740900033158497197e-1": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +# log +Test "log (0.7) == -0.35667494393873237891": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2341 +ldouble: 2341 +Test "log (e) == 1": +float: 0.5 +ifloat: 0.5 + +# log10 +Test "log10 (0.7) == -0.15490195998574316929": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 2033 +ldouble: 2033 +Test "log10 (e) == log10(e)": +float: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 + +# log1p +Test "log1p (-0.3) == -0.35667494393873237891": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 585 +ldouble: 585 + +# log2 +Test "log2 (0.7) == -0.51457317282975824043": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1688 +ldouble: 1688 + +# pow +Test "pow (0.7, 1.2) == 0.65180494056638638188": +ildouble: 725 +ldouble: 725 + +# sin +Test "sin (0.7) == 0.64421768723769105367": +ildouble: 627 +ldouble: 627 + +# sincos +Test "sincos (0.7, &sin_res, &cos_res) puts 0.64421768723769105367 in sin_res": +ildouble: 627 +ldouble: 627 +Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842626 in cos_res": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 528 +ldouble: 528 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res": +double: 1 +float: 0.5 +idouble: 1 +ifloat: 0.5 +Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.866025403784438646764 in sin_res": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1 +ldouble: 1 +Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res": +double: 0.2758 +float: 0.3667 +idouble: 0.2758 +ifloat: 0.3667 +ildouble: 0.25 +ldouble: 0.25 +Test "sincos (pi/6, &sin_res, &cos_res) puts 0.866025403784438646764 in cos_res": +float: 1 +ifloat: 1 + + +# sinh +Test "sinh (0.7) == 0.75858370183953350346": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 1028 +ldouble: 1029 + +# sqrt +Test "sqrt (0.7) == 0.83666002653407554798": +ildouble: 489 +ldouble: 489 +Test "sqrt (15239.9025) == 123.45": +ildouble: 325 +ldouble: 325 + +# tan +Test "tan (0.7) == 0.84228838046307944813": +ildouble: 1401 +ldouble: 1401 +Test "tan (pi/4) == 1": +double: 0.5 +idouble: 0.5 + +# tanh +Test "tanh (0.7) == 0.60436777711716349631": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 521 +ldouble: 521 + +# tgamma +Test "tgamma (-0.5) == -2 sqrt (pi)": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "tgamma (0.5) == sqrt (pi)": +float: 1 +ifloat: 1 +Test "tgamma (0.7) == 1.29805533264755778568": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# y0 +Test "y0 (0.1) == -1.5342386513503668441": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y0 (0.7) == -0.19066492933739506743": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "y0 (1.0) == 0.088256964215676957983": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "y0 (1.5) == 0.38244892379775884396": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "y0 (2.0) == 0.51037567264974511960": +double: 1 +idouble: 1 +Test "y0 (10.0) == 0.055671167283599391424": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "y0 (8.0) == 0.22352148938756622053": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 + +# y1 +Test "y1 (0.1) == -6.4589510947020269877": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "y1 (0.7) == -1.1032498719076333697": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "y1 (1.0) == -0.78121282130028871655": +double: 1 +idouble: 1 +Test "y1 (1.5) == -0.41230862697391129595": +float: 1 +ifloat: 1 +Test "y1 (10.0) == 0.24901542420695388392": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +Test "y1 (2.0) == -0.10703243154093754689": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "y1 (8.0) == -0.15806046173124749426": +float: 2 +ifloat: 2 +double: 1 +idouble: 1 + +# yn +Test "yn (0, 0.1) == -1.5342386513503668441": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (0, 0.7) == -0.19066492933739506743": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "yn (0, 1.0) == 0.088256964215676957983": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (0, 1.5) == 0.38244892379775884396": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "yn (0, 2.0) == 0.51037567264974511960": +double: 1 +idouble: 1 +Test "yn (0, 10.0) == 0.055671167283599391424": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "yn (0, 8.0) == 0.22352148938756622053": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "yn (1, 0.1) == -6.4589510947020269877": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (1, 0.7) == -1.1032498719076333697": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "yn (1, 1.0) == -0.78121282130028871655": +double: 1 +idouble: 1 +Test "yn (1, 1.5) == -0.41230862697391129595": +float: 1 +ifloat: 1 +Test "yn (1, 10.0) == 0.24901542420695388392": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +Test "yn (1, 2.0) == -0.10703243154093754689": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 +Test "yn (1, 8.0) == -0.15806046173124749426": +float: 2 +ifloat: 2 +double: 1 +idouble: 1 +Test "yn (10, 0.1) == -0.11831335132045197885e19": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (10, 0.7) == -0.42447194260703866924e10": +double: 6 +float: 3 +idouble: 6 +ifloat: 3 +Test "yn (10, 1.0) == -0.12161801427868918929e9": +float: 2 +ifloat: 2 +double: 1 +idouble: 1 +Test "yn (10, 10.0) == -0.35981415218340272205": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +Test "yn (10, 2.0) == -129184.54220803928264": +float: 1 +ifloat: 1 +double: 3 +idouble: 3 +Test "yn (3, 0.1) == -5099.3323786129048894": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +Test "yn (3, 0.7) == -15.819479052819633505": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 +Test "yn (3, 2.0) == -1.1277837768404277861": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +Test "yn (3, 10.0) == -0.25136265718383732978": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +# Maximal error of functions: +Function: "acos": +ildouble: 1149 +ldouble: 1149 + +Function: "asin": +float: 2 +ifloat: 2 +double: 1 +idouble: 1 +ildouble: 1147 +ldouble: 1147 + +Function: "asinh": +double: 1 +idouble: 1 +ildouble: 656 +ldouble: 656 + +Function: "atan": +ildouble: 549 +ldouble: 549 + +Function: "atan2": +ildouble: 549 +ldouble: 549 + +Function: "atanh": +double: 1 +idouble: 1 +ildouble: 1605 +ldouble: 1605 + +Function: "cabs": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 560 +ldouble: 560 + +Function: Real part of "cacos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 151 +ldouble: 151 + +Function: Imaginary part of "cacos": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +Function: Real part of "cacosh": +float: 7 +ifloat: 7 +double: 1 +idouble: 1 +ildouble: 328 +ldouble: 328 + +Function: Imaginary part of "cacosh": +float: 3 +ifloat: 3 +double: 1 +idouble: 1 +ildouble: 151 +ldouble: 151 + +Function: Real part of "casin": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 +ildouble: 603 +ldouble: 603 + +Function: Imaginary part of "casin": +float: 2 +ifloat: 2 +ildouble: 329 +ldouble: 329 + +Function: Real part of "casinh": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 +ildouble: 892 +ldouble: 892 + +Function: Imaginary part of "casinh": +double: 3 +float: 6 +idouble: 3 +ifloat: 6 +ildouble: 12 +ldouble: 12 + +Function: Real part of "catan": +float: 4 +ifloat: 4 +ildouble: 251 +ldouble: 251 + +Function: Imaginary part of "catan": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 474 +ldouble: 474 + +Function: Real part of "catanh": +double: 4 +idouble: 4 +ildouble: 66 +ldouble: 66 + +Function: Imaginary part of "catanh": +float: 6 +ifloat: 6 +double: 1 +idouble: 1 +ildouble: 447 +ldouble: 447 + +Function: "cbrt": +double: 1 +idouble: 1 +ildouble: 716 +ldouble: 716 + +Function: Real part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 5 +ldouble: 5 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1901 +ldouble: 1901 + +Function: Real part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1467 +ldouble: 1467 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1183 +ldouble: 1183 + +Function: Real part of "cexp": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 940 +ldouble: 940 + +Function: Imaginary part of "cexp": +float: 1 +ifloat: 1 +ildouble: 1067 +ldouble: 1067 + +Function: Real part of "clog": + +Function: Imaginary part of "clog": +float: 3 +ifloat: 3 +double: 1 +idouble: 1 +ildouble: 1 +ldouble: 1 + +Function: Real part of "clog10": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 1402 +ldouble: 1402 + +Function: Imaginary part of "clog10": +float: 5 +ifloat: 5 +double: 1 +idouble: 1 +ildouble: 186 +ldouble: 186 + +Function: "cos": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 529 +ldouble: 529 + +Function: "cosh": +ildouble: 309 +ldouble: 309 + +Function: Real part of "cpow": +double: 1 +float: 4 +idouble: 1 +ifloat: 4 + +Function: Imaginary part of "cpow": +double: 1.104 +float: 2.5333 +idouble: 1.104 +ifloat: 2.5333 +ildouble: 2 +ldouble: 2 + +Function: Real part of "csin": +float: 1 +ifloat: 1 +ildouble: 966 +ldouble: 966 + +Function: Imaginary part of "csin": +float: 1 +ifloat: 1 +ildouble: 168 +ldouble: 168 + +Function: Real part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 413 +ldouble: 413 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 477 +ldouble: 477 + +Function: Real part of "csqrt": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 237 +ldouble: 237 + +Function: Imaginary part of "csqrt": +float: 2 +ifloat: 2 +ildouble: 128 +ldouble: 128 + +Function: Real part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 690 +ldouble: 690 + +Function: Imaginary part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 367 +ldouble: 367 + +Function: Real part of "ctanh": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 +ildouble: 286 +ldouble: 286 + +Function: Imaginary part of "ctanh": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 +ildouble: 3074 +ldouble: 3074 + +Function: "erfc": +double: 24 +float: 12 +idouble: 24 +ifloat: 12 + +Function: "exp": +ildouble: 412 +ldouble: 412 + +Function: "exp10": +float: 2 +ifloat: 2 +double: 6 +idouble: 6 +ildouble: 1182 +ldouble: 1182 + +Function: "exp2": +ildouble: 462 +ldouble: 462 + +Function: "expm1": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 825 +ldouble: 825 + +Function: "fmod": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 +ildouble: 4096 +ldouble: 4096 + +Function: "gamma": +double: 1 +idouble: 1 + +Function: "hypot": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 560 +ldouble: 560 + +Function: "j0": +float: 1 +ifloat: 1 +double: 2 +idouble: 2 + +Function: "j1": +float: 2 +ifloat: 2 +double: 2 +idouble: 2 + +Function: "jn": +float: 4 +ifloat: 4 +double: 6 +idouble: 6 + +Function: "lgamma": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "log": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2341 +ldouble: 2341 + +Function: "log10": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 2033 +ldouble: 2033 + +Function: "log1p": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 585 +ldouble: 585 + +Function: "log2": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 1688 +ldouble: 1688 + +Function: "pow": +ildouble: 725 +ldouble: 725 + +Function: "sin": +ildouble: 627 +ldouble: 627 + +Function: "sincos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 +ildouble: 627 +ldouble: 627 + +Function: "sinh": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 1028 +ldouble: 1029 + +Function: "sqrt": +ildouble: 489 +ldouble: 489 + +Function: "tan": +double: 0.5 +idouble: 0.5 +ildouble: 1401 +ldouble: 1401 + +Function: "tanh": +float: 1 +ifloat: 1 +double: 1 +idouble: 1 +ildouble: 521 +ldouble: 521 + +Function: "tgamma": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "y0": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "y1": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 + +Function: "yn": +double: 6 +float: 3 +idouble: 6 +ifloat: 3 + +# end of automatic generation diff --git a/sysdeps/ia64/fpu/printf_fphex.c b/sysdeps/ia64/fpu/printf_fphex.c new file mode 100644 index 0000000..fca607c --- /dev/null +++ b/sysdeps/ia64/fpu/printf_fphex.c @@ -0,0 +1,80 @@ +/* Print floating point number in hexadecimal notation according to ISO C99. + Copyright (C) 2000 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef LONG_DOUBLE_DENORM_BIAS +# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1) +#endif + +#define PRINT_FPHEX_LONG_DOUBLE \ +do { \ + /* The "strange" 80 bit format on ia64 has an explicit \ + leading digit in the 64 bit mantissa. */ \ + unsigned long long int num; \ + \ + num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32 \ + | fpnum.ldbl.ieee.mantissa1); \ + \ + zero_mantissa = num == 0; \ + \ + numstr = _itoa_word (num, numbuf + sizeof numbuf, 16, \ + info->spec == 'A'); \ + wnumstr = _itowa_word (num, wnumbuf + sizeof wnumbuf, 16, \ + info->spec == 'A'); \ + \ + /* Fill with zeroes. */ \ + while (numstr > numbuf + (sizeof numbuf - 64 / 4)) \ + { \ + *--numstr = '0'; \ + *--wnumstr = L'0'; \ + } \ + \ + /* We use a full nibble for the leading digit. */ \ + leading = *numstr++; \ + \ + /* We have 3 bits from the mantissa in the leading nibble. \ + Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */ \ + exponent = fpnum.ldbl.ieee.exponent; \ + \ + if (exponent == 0) \ + { \ + if (zero_mantissa) \ + expnegative = 0; \ + else \ + { \ + /* This is a denormalized number. */ \ + expnegative = 1; \ + /* This is a hook for the m68k long double format, where the \ + exponent bias is the same for normalized and denormalized \ + numbers. */ \ + exponent = LONG_DOUBLE_DENORM_BIAS + 3; \ + } \ + } \ + else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3) \ + { \ + expnegative = 0; \ + exponent -= IEEE854_LONG_DOUBLE_BIAS + 3; \ + } \ + else \ + { \ + expnegative = 1; \ + exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3)); \ + } \ +} while (0) + +#include diff --git a/sysdeps/ia64/fpu/s_isinfl.c b/sysdeps/ia64/fpu/s_isinfl.c new file mode 100644 index 0000000..ca818b5 --- /dev/null +++ b/sysdeps/ia64/fpu/s_isinfl.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/ia64/fpu/s_isnanl.c b/sysdeps/ia64/fpu/s_isnanl.c new file mode 100644 index 0000000..06e69c3 --- /dev/null +++ b/sysdeps/ia64/fpu/s_isnanl.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/ia64/fpu/s_nextafterl.c b/sysdeps/ia64/fpu/s_nextafterl.c new file mode 100644 index 0000000..f59f168 --- /dev/null +++ b/sysdeps/ia64/fpu/s_nextafterl.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/sparc/sparc64/bits/endian.h b/sysdeps/sparc/bits/endian.h similarity index 100% rename from sysdeps/sparc/sparc64/bits/endian.h rename to sysdeps/sparc/bits/endian.h diff --git a/sysdeps/sparc/sparc32/bits/endian.h b/sysdeps/sparc/sparc32/bits/endian.h deleted file mode 100644 index 68fc68d..0000000 --- a/sysdeps/sparc/sparc32/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* SPARC is big-endian. */ - -#ifndef _ENDIAN_H -# error "Never use directly; include instead." -#endif - -#define __BYTE_ORDER __BIG_ENDIAN diff --git a/sysdeps/sparc/sparc32/ieee754.h b/sysdeps/sparc/sparc32/ieee754.h new file mode 100644 index 0000000..c3b2f38 --- /dev/null +++ b/sysdeps/sparc/sparc32/ieee754.h @@ -0,0 +1,171 @@ +/* Copyright (C) 1992, 1995, 1996, 1999 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _IEEE754_H + +#define _IEEE754_H 1 +#include + +#include + +__BEGIN_DECLS + +union ieee754_float + { + float f; + + /* This is the IEEE 754 single-precision format. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:8; + unsigned int mantissa:23; +#endif /* Big endian. */ +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int mantissa:23; + unsigned int exponent:8; + unsigned int negative:1; +#endif /* Little endian. */ + } ieee; + + /* This format makes it easier to see if a NaN is a signalling NaN. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:8; + unsigned int quiet_nan:1; + unsigned int mantissa:22; +#endif /* Big endian. */ +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int mantissa:22; + unsigned int quiet_nan:1; + unsigned int exponent:8; + unsigned int negative:1; +#endif /* Little endian. */ + } ieee_nan; + }; + +#define IEEE754_FLOAT_BIAS 0x7f /* Added to exponent. */ + + +union ieee754_double + { + double d; + + /* This is the IEEE 754 double-precision format. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + /* Together these comprise the mantissa. */ + unsigned int mantissa0:20; + unsigned int mantissa1:32; +#endif /* Big endian. */ +#if __BYTE_ORDER == __LITTLE_ENDIAN + /* Together these comprise the mantissa. */ + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; +#endif /* Little endian. */ + } ieee; + + /* This format makes it easier to see if a NaN is a signalling NaN. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + unsigned int quiet_nan:1; + /* Together these comprise the mantissa. */ + unsigned int mantissa0:19; + unsigned int mantissa1:32; +#else + /* Together these comprise the mantissa. */ + unsigned int mantissa1:32; + unsigned int mantissa0:19; + unsigned int quiet_nan:1; + unsigned int exponent:11; + unsigned int negative:1; +#endif + } ieee_nan; + }; + +#define IEEE754_DOUBLE_BIAS 0x3ff /* Added to exponent. */ + + +union ieee854_long_double + { + long double d; + + /* This is the IEEE 854 quad-precision format. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:15; + /* Together these comprise the mantissa. */ + unsigned int mantissa0:16; + unsigned int mantissa1:32; + unsigned int mantissa2:32; + unsigned int mantissa3:32; +#endif /* Big endian. */ +#if __BYTE_ORDER == __LITTLE_ENDIAN + /* Together these comprise the mantissa. */ + unsigned int mantissa3:32; + unsigned int mantissa2:32; + unsigned int mantissa1:32; + unsigned int mantissa0:16; + unsigned int exponent:15; + unsigned int negative:1; +#endif /* Little endian. */ + } ieee; + + /* This format makes it easier to see if a NaN is a signalling NaN. */ + struct + { +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:15; + unsigned int quiet_nan:1; + /* Together these comprise the mantissa. */ + unsigned int mantissa0:15; + unsigned int mantissa1:32; + unsigned int mantissa2:32; + unsigned int mantissa3:32; +#else + /* Together these comprise the mantissa. */ + unsigned int mantissa3:32; + unsigned int mantissa2:32; + unsigned int mantissa1:32; + unsigned int mantissa0:15; + unsigned int quiet_nan:1; + unsigned int exponent:15; + unsigned int negative:1; +#endif + } ieee_nan; + }; + +#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent. */ + +__END_DECLS + +#endif /* ieee754.h */ diff --git a/sysdeps/unix/sysv/linux/ia64/fork.c b/sysdeps/unix/sysv/linux/ia64/fork.S similarity index 61% rename from sysdeps/unix/sysv/linux/ia64/fork.c rename to sysdeps/unix/sysv/linux/ia64/fork.S index c63e994..404f353 100644 --- a/sysdeps/unix/sysv/linux/ia64/fork.c +++ b/sysdeps/unix/sysv/linux/ia64/fork.S @@ -1,7 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Andreas Schwab, , - December 1995. +/* Copyright (C) 2000 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -18,17 +15,26 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include -#include -extern int __clone (int (*fn)(void *), void *ksp, unsigned long int flags, - void *arg); +#include +#define _SIGNAL_H +#include -int -__libc_fork (void) -{ - return __clone (NULL, NULL, SIGCHLD, 0); -} +/* pid_t fork(void); */ +/* Implemented as a clone system call with parameters SIGCHLD and 0 */ + +ENTRY(__libc_fork) + alloc r2=ar.pfs,0,0,2,0 + mov out0=SIGCHLD /* Return SIGCHLD when child finishes */ + /* no other clone flags; nothing shared */ + mov out1=0 /* Standard sp value. */ + ;; + DO_CALL (SYS_ify (clone)) + cmp.eq p6,p0=-1,r10 + ;; +(p6) br.cond.spnt.few __syscall_error + ret +PSEUDO_END(__libc_fork) -weak_alias (__libc_fork, fork) weak_alias (__libc_fork, __fork) +weak_alias (__libc_fork, fork) diff --git a/sysdeps/unix/sysv/linux/ia64/vfork.S b/sysdeps/unix/sysv/linux/ia64/vfork.S new file mode 100644 index 0000000..e873c78 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/vfork.S @@ -0,0 +1,43 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + +#include +#define _SIGNAL_H +#include + +/* The following are defined in linux/sched.h, which unfortunately */ +/* is not safe for inclusion in an assembly file. */ +#define CLONE_VM 0x00000100 /* set if VM shared between processes */ +#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ + +/* pid_t vfork(void); */ +/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ + +ENTRY(__vfork) + alloc r2=ar.pfs,0,0,2,0 + mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD + mov out1=0 /* Standard sp value. */ + ;; + DO_CALL (SYS_ify (clone)) + cmp.eq p6,p0=-1,r10 + ;; +(p6) br.cond.spnt.few __syscall_error + ret +PSEUDO_END(__vfork) + +weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index e40ee32..9dd9155 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). The GNU C Library is free software; you can redistribute it and/or @@ -35,30 +35,26 @@ __clone: /* sanity check arguments */ tst %i0 be .Lerror - tst %i1 + orcc %i1,%g0,%o1 be .Lerror - nop + mov %i2,%o0 /* Do the system call */ - mov %i1,%o1 - mov %i2,%o0 set __NR_clone,%g1 ta 0x10 bcs .Lerror tst %o1 bne __thread_start nop - mov %o0,%i0 ret - restore + restore %o0,%g0,%o0 .Lerror: call __errno_location or %g0,EINVAL,%i0 st %i0,[%o0] - mov -1,%i0 ret - restore + restore %g0,-1,%o0 .size __clone, .-__clone diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index d7506b7..a8e317e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2000 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). The GNU C Library is free software; you can redistribute it and/or @@ -45,7 +45,7 @@ __clone: ta 0x6d bcs,pn %xcc, 99f nop - brnz,pn %o0, __thread_start + brnz,pn %o1, __thread_start mov %o0, %i0 ret restore @@ -70,9 +70,8 @@ __clone: nop st %i0, [%o0] #endif - mov -1,%i0 ret - restore + restore %g0,-1,%o0 .size __clone, .-__clone .type __thread_start,@function -- 2.7.4