Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 26 Sep 2000 19:13:37 +0000 (19:13 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 26 Sep 2000 19:13:37 +0000 (19:13 +0000)
2000-09-26  Jakub Jelinek  <jakub@redhat.com>

* 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  <jes@linuxcare.com>

* 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  <hjl@gnu.org>

* sysdeps/ia64/fpu/printf_fphex.c: New file.

* sysdeps/ia64/fpu/libm-test-ulps: New file.

2000-09-17  H.J. Lu  <hjl@gnu.org>

* 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  <hjl@gnu.org>

* 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  <hjl@gnu.org>

* 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  <jes@linuxcare.com>

* 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 <wilson@cygnus.com>

2000-09-26  Ulrich Drepper  <drepper@redhat.com>

* string/strxfrm.c: Only require alignment on __alignof__ (int32_t)
instead of 4.

2000-09-26  Andreas Schwab  <schwab@suse.de>

* 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  <jes@linuxcare.com>

* 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.

28 files changed:
ChangeLog
elf/dl-addr.c
elf/dl-close.c
locale/loadlocale.c
locale/programs/ld-collate.c
math/math_private.h
string/strcoll.c
string/strxfrm.c
sysdeps/generic/ldsodefs.h
sysdeps/ia64/Makefile
sysdeps/ia64/Versions
sysdeps/ia64/bits/byteswap.h
sysdeps/ia64/dl-fptr.c
sysdeps/ia64/dl-lookupcfg.h
sysdeps/ia64/dl-machine.h
sysdeps/ia64/fpu/bits/mathdef.h [new file with mode: 0644]
sysdeps/ia64/fpu/libm-test-ulps [new file with mode: 0644]
sysdeps/ia64/fpu/printf_fphex.c [new file with mode: 0644]
sysdeps/ia64/fpu/s_isinfl.c [new file with mode: 0644]
sysdeps/ia64/fpu/s_isnanl.c [new file with mode: 0644]
sysdeps/ia64/fpu/s_nextafterl.c [new file with mode: 0644]
sysdeps/sparc/bits/endian.h [moved from sysdeps/sparc/sparc64/bits/endian.h with 100% similarity]
sysdeps/sparc/sparc32/bits/endian.h [deleted file]
sysdeps/sparc/sparc32/ieee754.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/fork.S [moved from sysdeps/unix/sysv/linux/ia64/fork.c with 61% similarity]
sysdeps/unix/sysv/linux/ia64/vfork.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/sparc32/clone.S
sysdeps/unix/sysv/linux/sparc/sparc64/clone.S

index a0255ab..5281137 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,118 @@
+2000-09-26  Jakub Jelinek  <jakub@redhat.com>
+
+       * 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  <jes@linuxcare.com>
+
+       * 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  <hjl@gnu.org>
+
+       * sysdeps/ia64/fpu/printf_fphex.c: New file.
+
+       * sysdeps/ia64/fpu/libm-test-ulps: New file.
+
+2000-09-17  H.J. Lu  <hjl@gnu.org>
+
+       * 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  <hjl@gnu.org>
+
+       * 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  <hjl@gnu.org>
+
+       * 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  <jes@linuxcare.com>
+
+       * 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 <wilson@cygnus.com>
+
+2000-09-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * string/strxfrm.c: Only require alignment on __alignof__ (int32_t)
+       instead of 4.
+
+2000-09-26  Andreas Schwab  <schwab@suse.de>
+
+       * 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  <jes@linuxcare.com>
+
+       * 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  <schwab@suse.de>
 
        * sysdeps/m68k/fpu/libm-test-ulps: New file
        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  <jes@linuxcare.com>
 
 
        * 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  <aj@suse.de>
 
index 2fda238..ed183b1 100644 (file)
@@ -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;
index 40bc6f7..f62c171 100644 (file)
@@ -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
index 4aacbc9..8c7afda 100644 (file)
@@ -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));
        }
index da3cfa7..d417c66 100644 (file)
@@ -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));
index 99be167..280f81d 100644 (file)
@@ -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_ */
index 14b2039..49725e1 100644 (file)
@@ -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);
index b9d3209..df44586 100644 (file)
@@ -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)
index b93482c..e16a42a 100644 (file)
@@ -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
index 5f4ca3d..d2f690e 100644 (file)
@@ -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
index e332317..20fea95 100644 (file)
@@ -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;
   }
 }
index d728b64..2156d23 100644 (file)
@@ -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)
index 0fb9654..85fefa3 100644 (file)
@@ -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;
+}
index ab2ff1f..4e14e3b 100644 (file)
    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)
index fd94d13..aedf2a3 100644 (file)
@@ -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 (file)
index 0000000..bd2ce5d
--- /dev/null
@@ -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 <bits/mathdef.h> directly; include <math.h> instead"
+#endif
+
+#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF
+# define _MATH_H_MATHDEF       1
+
+/* 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 (file)
index 0000000..58e6bfa
--- /dev/null
@@ -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 (file)
index 0000000..fca607c
--- /dev/null
@@ -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 <sysdeps/generic/printf_fphex.c>
diff --git a/sysdeps/ia64/fpu/s_isinfl.c b/sysdeps/ia64/fpu/s_isinfl.c
new file mode 100644 (file)
index 0000000..ca818b5
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/i386/fpu/s_isinfl.c>
diff --git a/sysdeps/ia64/fpu/s_isnanl.c b/sysdeps/ia64/fpu/s_isnanl.c
new file mode 100644 (file)
index 0000000..06e69c3
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/i386/fpu/s_isnanl.c>
diff --git a/sysdeps/ia64/fpu/s_nextafterl.c b/sysdeps/ia64/fpu/s_nextafterl.c
new file mode 100644 (file)
index 0000000..f59f168
--- /dev/null
@@ -0,0 +1 @@
+#include <sysdeps/i386/fpu/s_nextafterl.c>
diff --git a/sysdeps/sparc/sparc32/bits/endian.h b/sysdeps/sparc/sparc32/bits/endian.h
deleted file mode 100644 (file)
index 68fc68d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/* SPARC is big-endian.  */
-
-#ifndef _ENDIAN_H
-# error "Never use <bits/endian.h> directly; include <endian.h> 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 (file)
index 0000000..c3b2f38
--- /dev/null
@@ -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 <features.h>
+
+#include <endian.h>
+
+__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 */
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 (file)
@@ -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, <schwab@issan.informatik.uni-dortmund.de>,
-   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
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <unistd.h>
-#include <asm/signal.h>
 
-extern int __clone (int (*fn)(void *), void *ksp, unsigned long int flags,
-                 void *arg);
+#include <sysdep.h>
+#define _SIGNAL_H
+#include <bits/signum.h>
 
-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 (file)
index 0000000..e873c78
--- /dev/null
@@ -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 <sysdep.h>
+#define _SIGNAL_H
+#include <bits/signum.h>
+
+/* 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)
index e40ee32..9dd9155 100644 (file)
@@ -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
 
index d7506b7..a8e317e 100644 (file)
@@ -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